зеркало из https://github.com/mozilla/gecko-dev.git
Merge m-c to fx-team.
This commit is contained in:
Коммит
bf935f071d
2
CLOBBER
2
CLOBBER
|
@ -22,4 +22,4 @@
|
|||
# changes to stick? As of bug 928195, this shouldn't be necessary! Please
|
||||
# don't change CLOBBER for WebIDL changes any more.
|
||||
|
||||
bug 960811 - clobber to rebuild preprocessed files when enabling synthetic APKs
|
||||
Bug 924839 - Touching ICU's configure scripts in this bug doesn't work without a clobber. This is filed as bug 966038.
|
||||
|
|
|
@ -13,11 +13,11 @@
|
|||
"{workdir}/sources.xml"
|
||||
],
|
||||
"upload_platform": "emulator-ics",
|
||||
"gecko_l10n_root": "http://hg.mozilla.org/l10n-central",
|
||||
"gecko_l10n_root": "https://hg.mozilla.org/l10n-central",
|
||||
"gaia": {
|
||||
"l10n": {
|
||||
"vcs": "hgtool",
|
||||
"root": "http://hg.mozilla.org/gaia-l10n"
|
||||
"root": "https://hg.mozilla.org/gaia-l10n"
|
||||
}
|
||||
},
|
||||
"b2g_manifest": "emulator.xml",
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="aedd5c9636f305d4433491056a0ca984dfb859b1"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="67f11d9b60750270f0bea834832e8108e95204e8"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="e9b6626eddbc85873eaa2a9174a9bd5101e5c05f"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="eda08beb3ba9a159843c70ffde0f9660ec351eb9"/>
|
||||
|
|
|
@ -19,11 +19,11 @@
|
|||
"{workdir}/sources.xml"
|
||||
],
|
||||
"upload_platform": "emulator-jb",
|
||||
"gecko_l10n_root": "http://hg.mozilla.org/l10n-central",
|
||||
"gecko_l10n_root": "https://hg.mozilla.org/l10n-central",
|
||||
"gaia": {
|
||||
"l10n": {
|
||||
"vcs": "hgtool",
|
||||
"root": "http://hg.mozilla.org/gaia-l10n"
|
||||
"root": "https://hg.mozilla.org/gaia-l10n"
|
||||
}
|
||||
},
|
||||
"b2g_manifest": "emulator-jb.xml",
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
</project>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="aedd5c9636f305d4433491056a0ca984dfb859b1"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="67f11d9b60750270f0bea834832e8108e95204e8"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="e9b6626eddbc85873eaa2a9174a9bd5101e5c05f"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="e33ea242b4328fb0d1824c951f379332b5021512"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="0ff2eb11982b9d3c7a3333900cf0d3a5c0f77e32"/>
|
||||
|
|
|
@ -18,11 +18,11 @@
|
|||
"{objdir}/dist/b2g-*.crashreporter-symbols.zip",
|
||||
"{workdir}/sources.xml"
|
||||
],
|
||||
"gecko_l10n_root": "http://hg.mozilla.org/l10n-central",
|
||||
"gecko_l10n_root": "https://hg.mozilla.org/l10n-central",
|
||||
"gaia": {
|
||||
"l10n": {
|
||||
"vcs": "hgtool",
|
||||
"root": "http://hg.mozilla.org/gaia-l10n"
|
||||
"root": "https://hg.mozilla.org/gaia-l10n"
|
||||
}
|
||||
},
|
||||
"b2g_manifest": "emulator.xml",
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="aedd5c9636f305d4433491056a0ca984dfb859b1"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="67f11d9b60750270f0bea834832e8108e95204e8"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="e9b6626eddbc85873eaa2a9174a9bd5101e5c05f"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="eda08beb3ba9a159843c70ffde0f9660ec351eb9"/>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{
|
||||
"revision": "a7eca2fffd8345f66a3908a52ae00408bff82497",
|
||||
"revision": "56cedb487649ecd17173482c4ffe87d1bc298d86",
|
||||
"repo_path": "/integration/gaia-central"
|
||||
}
|
||||
|
|
|
@ -31,11 +31,11 @@
|
|||
"b2g_manifest_branch": "master",
|
||||
"b2g_manifest_intree": true,
|
||||
"additional_source_tarballs": ["backup-hamachi.tar.xz"],
|
||||
"gecko_l10n_root": "http://hg.mozilla.org/l10n-central",
|
||||
"gecko_l10n_root": "https://hg.mozilla.org/l10n-central",
|
||||
"gaia": {
|
||||
"l10n": {
|
||||
"vcs": "hgtool",
|
||||
"root": "http://hg.mozilla.org/gaia-l10n"
|
||||
"root": "https://hg.mozilla.org/gaia-l10n"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,11 +26,11 @@
|
|||
"b2g_manifest": "hamachi.xml",
|
||||
"b2g_manifest_branch": "master",
|
||||
"additional_source_tarballs": ["backup-hamachi.tar.xz"],
|
||||
"gecko_l10n_root": "http://hg.mozilla.org/l10n-central",
|
||||
"gecko_l10n_root": "https://hg.mozilla.org/l10n-central",
|
||||
"gaia": {
|
||||
"l10n": {
|
||||
"vcs": "hgtool",
|
||||
"root": "http://hg.mozilla.org/gaia-l10n"
|
||||
"root": "https://hg.mozilla.org/gaia-l10n"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="aedd5c9636f305d4433491056a0ca984dfb859b1"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="67f11d9b60750270f0bea834832e8108e95204e8"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="e9b6626eddbc85873eaa2a9174a9bd5101e5c05f"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="84f2f2fce22605e17d511ff1767e54770067b5b5"/>
|
||||
|
|
|
@ -26,11 +26,11 @@
|
|||
"b2g_manifest_branch": "master",
|
||||
"b2g_manifest_intree": true,
|
||||
"additional_source_tarballs": ["helix-ics.tar.xz"],
|
||||
"gecko_l10n_root": "http://hg.mozilla.org/l10n-central",
|
||||
"gecko_l10n_root": "https://hg.mozilla.org/l10n-central",
|
||||
"gaia": {
|
||||
"l10n": {
|
||||
"vcs": "hgtool",
|
||||
"root": "http://hg.mozilla.org/gaia-l10n"
|
||||
"root": "https://hg.mozilla.org/gaia-l10n"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="aedd5c9636f305d4433491056a0ca984dfb859b1"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="67f11d9b60750270f0bea834832e8108e95204e8"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="e9b6626eddbc85873eaa2a9174a9bd5101e5c05f"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="84f2f2fce22605e17d511ff1767e54770067b5b5"/>
|
||||
|
|
|
@ -31,11 +31,11 @@
|
|||
"b2g_manifest_branch": "master",
|
||||
"b2g_manifest_intree": true,
|
||||
"additional_source_tarballs": ["backup-inari.tar.xz"],
|
||||
"gecko_l10n_root": "http://hg.mozilla.org/l10n-central",
|
||||
"gecko_l10n_root": "https://hg.mozilla.org/l10n-central",
|
||||
"gaia": {
|
||||
"l10n": {
|
||||
"vcs": "hgtool",
|
||||
"root": "http://hg.mozilla.org/gaia-l10n"
|
||||
"root": "https://hg.mozilla.org/gaia-l10n"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="aedd5c9636f305d4433491056a0ca984dfb859b1"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="67f11d9b60750270f0bea834832e8108e95204e8"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="e9b6626eddbc85873eaa2a9174a9bd5101e5c05f"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="84f2f2fce22605e17d511ff1767e54770067b5b5"/>
|
||||
|
|
|
@ -26,11 +26,11 @@
|
|||
"b2g_manifest_branch": "master",
|
||||
"b2g_manifest_intree": true,
|
||||
"additional_source_tarballs": ["backup-leo.tar.xz"],
|
||||
"gecko_l10n_root": "http://hg.mozilla.org/l10n-central",
|
||||
"gecko_l10n_root": "https://hg.mozilla.org/l10n-central",
|
||||
"gaia": {
|
||||
"l10n": {
|
||||
"vcs": "hgtool",
|
||||
"root": "http://hg.mozilla.org/gaia-l10n"
|
||||
"root": "https://hg.mozilla.org/gaia-l10n"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="aedd5c9636f305d4433491056a0ca984dfb859b1"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="67f11d9b60750270f0bea834832e8108e95204e8"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="e9b6626eddbc85873eaa2a9174a9bd5101e5c05f"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="84f2f2fce22605e17d511ff1767e54770067b5b5"/>
|
||||
|
|
|
@ -31,11 +31,11 @@
|
|||
"b2g_manifest_branch": "master",
|
||||
"b2g_manifest_intree": true,
|
||||
"additional_source_tarballs": [],
|
||||
"gecko_l10n_root": "http://hg.mozilla.org/l10n-central",
|
||||
"gecko_l10n_root": "https://hg.mozilla.org/l10n-central",
|
||||
"gaia": {
|
||||
"l10n": {
|
||||
"vcs": "hgtool",
|
||||
"root": "http://hg.mozilla.org/gaia-l10n"
|
||||
"root": "https://hg.mozilla.org/gaia-l10n"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
</project>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="aedd5c9636f305d4433491056a0ca984dfb859b1"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="67f11d9b60750270f0bea834832e8108e95204e8"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="e9b6626eddbc85873eaa2a9174a9bd5101e5c05f"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="e33ea242b4328fb0d1824c951f379332b5021512"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="0ff2eb11982b9d3c7a3333900cf0d3a5c0f77e32"/>
|
||||
|
@ -118,7 +118,7 @@
|
|||
<project name="platform/system/vold" path="system/vold" revision="8de05d4a52b5a91e7336e6baa4592f945a6ddbea"/>
|
||||
<default remote="caf" revision="refs/tags/android-4.3_r2.1" sync-j="4"/>
|
||||
<!-- Nexus 4 specific things -->
|
||||
<project name="device-mako" path="device/lge/mako" remote="b2g" revision="55a5f7def3310ba245102a97270daf1c052c058d"/>
|
||||
<project name="device-mako" path="device/lge/mako" remote="b2g" revision="78d17f0c117f0c66dd55ee8d5c5dde8ccc93ecba"/>
|
||||
<project name="device/generic/armv7-a-neon" path="device/generic/armv7-a-neon" revision="3a9a17613cc685aa232432566ad6cc607eab4ec1"/>
|
||||
<project name="device/lge/mako-kernel" path="device/lge/mako-kernel" revision="d1729e53d71d711c8fde25eab8728ff2b9b4df0e"/>
|
||||
<project name="platform_system_nfcd" path="system/nfcd" remote="b2g" revision="f995ccdb7c023b7edd8064c9d06fbea8f7108c45"/>
|
||||
|
|
|
@ -25,11 +25,11 @@
|
|||
"VARIANT": "user",
|
||||
"MOZILLA_OFFICIAL": "1"
|
||||
},
|
||||
"gecko_l10n_root": "http://hg.mozilla.org/l10n-central",
|
||||
"gecko_l10n_root": "https://hg.mozilla.org/l10n-central",
|
||||
"gaia": {
|
||||
"l10n": {
|
||||
"vcs": "hgtool",
|
||||
"root": "http://hg.mozilla.org/gaia-l10n"
|
||||
"root": "https://hg.mozilla.org/gaia-l10n"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,11 +26,11 @@
|
|||
"b2g_manifest_branch": "master",
|
||||
"b2g_manifest_intree": true,
|
||||
"additional_source_tarballs": ["backup-wasabi.tar.gz"],
|
||||
"gecko_l10n_root": "http://hg.mozilla.org/l10n-central",
|
||||
"gecko_l10n_root": "https://hg.mozilla.org/l10n-central",
|
||||
"gaia": {
|
||||
"l10n": {
|
||||
"vcs": "hgtool",
|
||||
"root": "http://hg.mozilla.org/gaia-l10n"
|
||||
"root": "https://hg.mozilla.org/gaia-l10n"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="aedd5c9636f305d4433491056a0ca984dfb859b1"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="67f11d9b60750270f0bea834832e8108e95204e8"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="e9b6626eddbc85873eaa2a9174a9bd5101e5c05f"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="84f2f2fce22605e17d511ff1767e54770067b5b5"/>
|
||||
|
|
|
@ -57,7 +57,7 @@ MOZ_PLACES=
|
|||
MOZ_B2G=1
|
||||
|
||||
if test "$OS_TARGET" = "Android"; then
|
||||
MOZ_NUWA_PROCESS=
|
||||
MOZ_NUWA_PROCESS=1
|
||||
fi
|
||||
MOZ_FOLD_LIBS=1
|
||||
|
||||
|
|
|
@ -50,6 +50,9 @@ let SessionHistoryInternal = {
|
|||
isEmpty: function (docShell) {
|
||||
let webNavigation = docShell.QueryInterface(Ci.nsIWebNavigation);
|
||||
let history = webNavigation.sessionHistory;
|
||||
if (!webNavigation.currentURI) {
|
||||
return true;
|
||||
}
|
||||
let uri = webNavigation.currentURI.spec;
|
||||
return uri == "about:blank" && history.count == 0;
|
||||
},
|
||||
|
|
|
@ -580,6 +580,11 @@ let SessionStoreInternal = {
|
|||
receiveMessage: function ssi_receiveMessage(aMessage) {
|
||||
var browser = aMessage.target;
|
||||
var win = browser.ownerDocument.defaultView;
|
||||
let tab = this._getTabForBrowser(browser);
|
||||
if (!tab) {
|
||||
// Ignore messages from <browser> elements that are not tabs.
|
||||
return;
|
||||
}
|
||||
|
||||
switch (aMessage.name) {
|
||||
case "SessionStore:setupSyncHandler":
|
||||
|
@ -593,7 +598,6 @@ let SessionStoreInternal = {
|
|||
case "SessionStore:restoreHistoryComplete":
|
||||
if (this.isCurrentEpoch(browser, aMessage.data.epoch)) {
|
||||
// Notify the tabbrowser that the tab chrome has been restored.
|
||||
let tab = this._getTabForBrowser(browser);
|
||||
let tabData = browser.__SS_data;
|
||||
|
||||
// wall-paper fix for bug 439675: make sure that the URL to be loaded
|
||||
|
@ -644,7 +648,6 @@ let SessionStoreInternal = {
|
|||
Services.obs.notifyObservers(browser, NOTIFY_TAB_RESTORED, null);
|
||||
}
|
||||
|
||||
let tab = this._getTabForBrowser(browser);
|
||||
if (tab) {
|
||||
SessionStoreInternal._resetLocalTabRestoringState(tab);
|
||||
SessionStoreInternal.restoreNextTab();
|
||||
|
@ -666,7 +669,6 @@ let SessionStoreInternal = {
|
|||
break;
|
||||
case "SessionStore:reloadPendingTab":
|
||||
if (this.isCurrentEpoch(browser, aMessage.data.epoch)) {
|
||||
let tab = this._getTabForBrowser(browser);
|
||||
if (tab && browser.__SS_restoreState == TAB_STATE_NEEDS_RESTORE) {
|
||||
this.restoreTabContent(tab);
|
||||
}
|
||||
|
@ -760,6 +762,12 @@ let SessionStoreInternal = {
|
|||
// internal data about the window.
|
||||
aWindow.__SSi = this._generateWindowID();
|
||||
|
||||
let mm = aWindow.messageManager;
|
||||
MESSAGES.forEach(msg => mm.addMessageListener(msg, this));
|
||||
|
||||
// Load the frame script after registering listeners.
|
||||
mm.loadFrameScript("chrome://browser/content/content-sessionStore.js", true);
|
||||
|
||||
// and create its data object
|
||||
this._windows[aWindow.__SSi] = { tabs: [], selected: 0, _closedTabs: [], busy: false };
|
||||
|
||||
|
@ -1082,6 +1090,9 @@ let SessionStoreInternal = {
|
|||
// Cache the window state until it is completely gone.
|
||||
DyingWindowCache.set(aWindow, winData);
|
||||
|
||||
let mm = aWindow.messageManager;
|
||||
MESSAGES.forEach(msg => mm.removeMessageListener(msg, this));
|
||||
|
||||
delete aWindow.__SSi;
|
||||
},
|
||||
|
||||
|
@ -1280,12 +1291,6 @@ let SessionStoreInternal = {
|
|||
* bool Do not save state if we're updating an existing tab
|
||||
*/
|
||||
onTabAdd: function ssi_onTabAdd(aWindow, aTab, aNoNotification) {
|
||||
let mm = aTab.linkedBrowser.messageManager;
|
||||
MESSAGES.forEach(msg => mm.addMessageListener(msg, this));
|
||||
|
||||
// Load the frame script after registering listeners.
|
||||
mm.loadFrameScript("chrome://browser/content/content-sessionStore.js", false);
|
||||
|
||||
if (!aNoNotification) {
|
||||
this.saveStateDelayed(aWindow);
|
||||
}
|
||||
|
@ -1302,9 +1307,6 @@ let SessionStoreInternal = {
|
|||
*/
|
||||
onTabRemove: function ssi_onTabRemove(aWindow, aTab, aNoNotification) {
|
||||
let browser = aTab.linkedBrowser;
|
||||
let mm = browser.messageManager;
|
||||
MESSAGES.forEach(msg => mm.removeMessageListener(msg, this));
|
||||
|
||||
delete browser.__SS_data;
|
||||
|
||||
// If this tab was in the middle of restoring or still needs to be restored,
|
||||
|
|
|
@ -63,6 +63,7 @@ MOCHITEST_ROBOCOP_FILES := \
|
|||
$(wildcard $(TESTPATH)/test*.js) \
|
||||
$(wildcard $(TESTPATH)/robocop*.js) \
|
||||
$(wildcard $(TESTPATH)/*.xml) \
|
||||
$(wildcard $(TESTPATH)/*.swf) \
|
||||
$(NULL)
|
||||
|
||||
GARBAGE += \
|
||||
|
|
|
@ -1293,19 +1293,11 @@ nsFrameLoader::SwapWithOtherLoader(nsFrameLoader* aOther,
|
|||
otherTabChild->SetChromeMessageManager(ourMessageManager);
|
||||
}
|
||||
// Swap and setup things in parent message managers.
|
||||
nsFrameMessageManager* ourParentManager = mMessageManager ?
|
||||
mMessageManager->GetParentManager() : nullptr;
|
||||
nsFrameMessageManager* otherParentManager = aOther->mMessageManager ?
|
||||
aOther->mMessageManager->GetParentManager() : nullptr;
|
||||
if (mMessageManager) {
|
||||
mMessageManager->RemoveFromParent();
|
||||
mMessageManager->SetParentManager(otherParentManager);
|
||||
mMessageManager->SetCallback(aOther, false);
|
||||
mMessageManager->SetCallback(aOther);
|
||||
}
|
||||
if (aOther->mMessageManager) {
|
||||
aOther->mMessageManager->RemoveFromParent();
|
||||
aOther->mMessageManager->SetParentManager(ourParentManager);
|
||||
aOther->mMessageManager->SetCallback(this, false);
|
||||
aOther->mMessageManager->SetCallback(this);
|
||||
}
|
||||
mMessageManager.swap(aOther->mMessageManager);
|
||||
|
||||
|
@ -2418,8 +2410,8 @@ nsFrameLoader::EnsureMessageManager()
|
|||
}
|
||||
|
||||
if (mMessageManager) {
|
||||
if (ShouldUseRemoteProcess()) {
|
||||
mMessageManager->SetCallback(mRemoteBrowserShown ? this : nullptr);
|
||||
if (ShouldUseRemoteProcess() && mRemoteBrowserShown) {
|
||||
mMessageManager->InitWithCallback(this);
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -2449,7 +2441,7 @@ nsFrameLoader::EnsureMessageManager()
|
|||
mChildMessageManager =
|
||||
new nsInProcessTabChildGlobal(mDocShell, mOwnerContent, mMessageManager);
|
||||
// Force pending frame scripts to be loaded.
|
||||
mMessageManager->SetCallback(this);
|
||||
mMessageManager->InitWithCallback(this);
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
|
|
@ -1066,49 +1066,58 @@ nsFrameMessageManager::ReceiveMessage(nsISupports* aTarget,
|
|||
}
|
||||
|
||||
void
|
||||
nsFrameMessageManager::AddChildManager(nsFrameMessageManager* aManager,
|
||||
bool aLoadScripts)
|
||||
nsFrameMessageManager::AddChildManager(nsFrameMessageManager* aManager)
|
||||
{
|
||||
mChildManagers.AppendObject(aManager);
|
||||
if (aLoadScripts) {
|
||||
nsRefPtr<nsFrameMessageManager> kungfuDeathGrip = this;
|
||||
nsRefPtr<nsFrameMessageManager> kungfuDeathGrip2 = aManager;
|
||||
// We have parent manager if we're a window message manager.
|
||||
// In that case we want to load the pending scripts from global
|
||||
// message manager.
|
||||
if (mParentManager) {
|
||||
nsRefPtr<nsFrameMessageManager> globalMM = mParentManager;
|
||||
for (uint32_t i = 0; i < globalMM->mPendingScripts.Length(); ++i) {
|
||||
aManager->LoadFrameScript(globalMM->mPendingScripts[i], false,
|
||||
globalMM->mPendingScriptsGlobalStates[i]);
|
||||
}
|
||||
}
|
||||
for (uint32_t i = 0; i < mPendingScripts.Length(); ++i) {
|
||||
aManager->LoadFrameScript(mPendingScripts[i], false,
|
||||
mPendingScriptsGlobalStates[i]);
|
||||
|
||||
nsRefPtr<nsFrameMessageManager> kungfuDeathGrip = this;
|
||||
nsRefPtr<nsFrameMessageManager> kungfuDeathGrip2 = aManager;
|
||||
// We have parent manager if we're a window message manager.
|
||||
// In that case we want to load the pending scripts from global
|
||||
// message manager.
|
||||
if (mParentManager) {
|
||||
nsRefPtr<nsFrameMessageManager> globalMM = mParentManager;
|
||||
for (uint32_t i = 0; i < globalMM->mPendingScripts.Length(); ++i) {
|
||||
aManager->LoadFrameScript(globalMM->mPendingScripts[i], false,
|
||||
globalMM->mPendingScriptsGlobalStates[i]);
|
||||
}
|
||||
}
|
||||
for (uint32_t i = 0; i < mPendingScripts.Length(); ++i) {
|
||||
aManager->LoadFrameScript(mPendingScripts[i], false,
|
||||
mPendingScriptsGlobalStates[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
nsFrameMessageManager::SetCallback(MessageManagerCallback* aCallback, bool aLoadScripts)
|
||||
nsFrameMessageManager::SetCallback(MessageManagerCallback* aCallback)
|
||||
{
|
||||
NS_ASSERTION(!mIsBroadcaster || !mCallback,
|
||||
"Broadcasters cannot have callbacks!");
|
||||
MOZ_ASSERT(!mIsBroadcaster || !mCallback,
|
||||
"Broadcasters cannot have callbacks!");
|
||||
if (aCallback && mCallback != aCallback) {
|
||||
mCallback = aCallback;
|
||||
if (mOwnsCallback) {
|
||||
mOwnedCallback = aCallback;
|
||||
}
|
||||
// First load global scripts by adding this to parent manager.
|
||||
if (mParentManager) {
|
||||
mParentManager->AddChildManager(this, aLoadScripts);
|
||||
}
|
||||
if (aLoadScripts) {
|
||||
for (uint32_t i = 0; i < mPendingScripts.Length(); ++i) {
|
||||
LoadFrameScript(mPendingScripts[i], false, mPendingScriptsGlobalStates[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
nsFrameMessageManager::InitWithCallback(MessageManagerCallback* aCallback)
|
||||
{
|
||||
if (mCallback) {
|
||||
// Initialization should only happen once.
|
||||
return;
|
||||
}
|
||||
|
||||
SetCallback(aCallback);
|
||||
|
||||
// First load global scripts by adding this to parent manager.
|
||||
if (mParentManager) {
|
||||
mParentManager->AddChildManager(this);
|
||||
}
|
||||
|
||||
for (uint32_t i = 0; i < mPendingScripts.Length(); ++i) {
|
||||
LoadFrameScript(mPendingScripts[i], false, mPendingScriptsGlobalStates[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -224,16 +224,15 @@ public:
|
|||
CpowHolder* aCpows, nsIPrincipal* aPrincipal,
|
||||
InfallibleTArray<nsString>* aJSONRetVal);
|
||||
|
||||
void AddChildManager(nsFrameMessageManager* aManager,
|
||||
bool aLoadScripts = true);
|
||||
void AddChildManager(nsFrameMessageManager* aManager);
|
||||
void RemoveChildManager(nsFrameMessageManager* aManager)
|
||||
{
|
||||
mChildManagers.RemoveObject(aManager);
|
||||
}
|
||||
void Disconnect(bool aRemoveFromParent = true);
|
||||
|
||||
void SetCallback(mozilla::dom::ipc::MessageManagerCallback* aCallback,
|
||||
bool aLoadScripts = true);
|
||||
void InitWithCallback(mozilla::dom::ipc::MessageManagerCallback* aCallback);
|
||||
void SetCallback(mozilla::dom::ipc::MessageManagerCallback* aCallback);
|
||||
mozilla::dom::ipc::MessageManagerCallback* GetCallback()
|
||||
{
|
||||
return mCallback;
|
||||
|
|
|
@ -3294,6 +3294,13 @@ nsresult HTMLMediaElement::DispatchAsyncEvent(const nsAString& aName)
|
|||
LOG_EVENT(PR_LOG_DEBUG, ("%p Queuing event %s", this,
|
||||
NS_ConvertUTF16toUTF8(aName).get()));
|
||||
|
||||
// Save events that occur while in the bfcache. These will be dispatched
|
||||
// if the page comes out of the bfcache.
|
||||
if (mEventDeliveryPaused) {
|
||||
mPendingEvents.AppendElement(aName);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIRunnable> event = new nsAsyncEventRunner(aName, this);
|
||||
NS_DispatchToMainThread(event, NS_DISPATCH_NORMAL);
|
||||
return NS_OK;
|
||||
|
|
|
@ -2587,10 +2587,6 @@ onInstallSuccessAck: function onInstallSuccessAck(aManifestURL,
|
|||
|
||||
_readManifests: function(aData) {
|
||||
return Task.spawn(function*() {
|
||||
if (!aData.length) {
|
||||
return aData;
|
||||
}
|
||||
|
||||
for (let elem of aData) {
|
||||
let id = elem.id;
|
||||
|
||||
|
@ -2599,17 +2595,15 @@ onInstallSuccessAck: function onInstallSuccessAck(aManifestURL,
|
|||
let baseDir = this.webapps[id].basePath == this.getCoreAppsBasePath()
|
||||
? "coreAppsDir" : DIRECTORY_NAME;
|
||||
|
||||
let file = FileUtils.getFile(baseDir, ["webapps", id, "manifest.webapp"], true);
|
||||
let dir = FileUtils.getDir(baseDir, ["webapps", id], false, true);
|
||||
|
||||
if (!file.exists()) {
|
||||
file = FileUtils.getFile(baseDir, ["webapps", id, "update.webapp"], true);
|
||||
let fileNames = ["manifest.webapp", "update.webapp", "manifest.json"];
|
||||
for (let fileName of fileNames) {
|
||||
this._manifestCache[id] = yield this._loadJSONAsync(OS.Path.join(dir.path, fileName));
|
||||
if (this._manifestCache[id]) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!file.exists()) {
|
||||
file = FileUtils.getFile(baseDir, ["webapps", id, "manifest.json"], true);
|
||||
}
|
||||
|
||||
this._manifestCache[id] = yield this._loadJSONAsync(file.path);
|
||||
}
|
||||
|
||||
elem.manifest = this._manifestCache[id];
|
||||
|
|
|
@ -150,10 +150,28 @@ public:
|
|||
void RegisterDefineDOMInterface(const nsAFlatString& aName,
|
||||
mozilla::dom::DefineInterface aDefineDOMInterface,
|
||||
mozilla::dom::ConstructorEnabled* aConstructorEnabled);
|
||||
template<size_t N>
|
||||
void RegisterDefineDOMInterface(const char16_t (&aKey)[N],
|
||||
mozilla::dom::DefineInterface aDefineDOMInterface,
|
||||
mozilla::dom::ConstructorEnabled* aConstructorEnabled)
|
||||
{
|
||||
nsLiteralString key(aKey);
|
||||
return RegisterDefineDOMInterface(key, aDefineDOMInterface,
|
||||
aConstructorEnabled);
|
||||
}
|
||||
|
||||
void RegisterNavigatorDOMConstructor(const nsAFlatString& aName,
|
||||
mozilla::dom::ConstructNavigatorProperty aNavConstructor,
|
||||
mozilla::dom::ConstructorEnabled* aConstructorEnabled);
|
||||
template<size_t N>
|
||||
void RegisterNavigatorDOMConstructor(const char16_t (&aKey)[N],
|
||||
mozilla::dom::ConstructNavigatorProperty aNavConstructor,
|
||||
mozilla::dom::ConstructorEnabled* aConstructorEnabled)
|
||||
{
|
||||
nsLiteralString key(aKey);
|
||||
return RegisterNavigatorDOMConstructor(key, aNavConstructor,
|
||||
aConstructorEnabled);
|
||||
}
|
||||
|
||||
typedef PLDHashOperator
|
||||
(* NameEnumerator)(const nsAString& aGlobalName, void* aClosure);
|
||||
|
|
|
@ -9529,11 +9529,11 @@ class CGRegisterProtos(CGAbstractMethod):
|
|||
def _defineMacro(self):
|
||||
return """
|
||||
#define REGISTER_PROTO(_dom_class, _ctor_check) \\
|
||||
aNameSpaceManager->RegisterDefineDOMInterface(NS_LITERAL_STRING(#_dom_class), _dom_class##Binding::DefineDOMInterface, _ctor_check);
|
||||
aNameSpaceManager->RegisterDefineDOMInterface(MOZ_UTF16(#_dom_class), _dom_class##Binding::DefineDOMInterface, _ctor_check);
|
||||
#define REGISTER_CONSTRUCTOR(_dom_constructor, _dom_class, _ctor_check) \\
|
||||
aNameSpaceManager->RegisterDefineDOMInterface(NS_LITERAL_STRING(#_dom_constructor), _dom_class##Binding::DefineDOMInterface, _ctor_check);
|
||||
aNameSpaceManager->RegisterDefineDOMInterface(MOZ_UTF16(#_dom_constructor), _dom_class##Binding::DefineDOMInterface, _ctor_check);
|
||||
#define REGISTER_NAVIGATOR_CONSTRUCTOR(_prop, _dom_class, _ctor_check) \\
|
||||
aNameSpaceManager->RegisterNavigatorDOMConstructor(NS_LITERAL_STRING(_prop), _dom_class##Binding::ConstructNavigatorObject, _ctor_check);
|
||||
aNameSpaceManager->RegisterNavigatorDOMConstructor(MOZ_UTF16(_prop), _dom_class##Binding::ConstructNavigatorObject, _ctor_check);
|
||||
|
||||
"""
|
||||
def _undefineMacro(self):
|
||||
|
|
|
@ -298,6 +298,10 @@ IDBTransaction::StartSavepoint()
|
|||
nsresult rv = stmt->Execute();
|
||||
NS_ENSURE_SUCCESS(rv, false);
|
||||
|
||||
if (IsWriteAllowed()) {
|
||||
mUpdateFileRefcountFunction->StartSavepoint();
|
||||
}
|
||||
|
||||
++mSavepointCount;
|
||||
|
||||
return true;
|
||||
|
@ -321,6 +325,10 @@ IDBTransaction::ReleaseSavepoint()
|
|||
nsresult rv = stmt->Execute();
|
||||
NS_ENSURE_SUCCESS(rv, NS_OK);
|
||||
|
||||
if (IsWriteAllowed()) {
|
||||
mUpdateFileRefcountFunction->ReleaseSavepoint();
|
||||
}
|
||||
|
||||
--mSavepointCount;
|
||||
|
||||
return NS_OK;
|
||||
|
@ -344,6 +352,10 @@ IDBTransaction::RollbackSavepoint()
|
|||
|
||||
nsresult rv = stmt->Execute();
|
||||
NS_ENSURE_SUCCESS_VOID(rv);
|
||||
|
||||
if (IsWriteAllowed()) {
|
||||
mUpdateFileRefcountFunction->RollbackSavepoint();
|
||||
}
|
||||
}
|
||||
|
||||
nsresult
|
||||
|
@ -1078,12 +1090,22 @@ UpdateRefcountFunction::ProcessValue(mozIStorageValueArray* aValues,
|
|||
entry = newEntry.forget();
|
||||
}
|
||||
|
||||
if (mInSavepoint) {
|
||||
mSavepointEntriesIndex.Put(id, entry);
|
||||
}
|
||||
|
||||
switch (aUpdateType) {
|
||||
case eIncrement:
|
||||
entry->mDelta++;
|
||||
if (mInSavepoint) {
|
||||
entry->mSavepointDelta++;
|
||||
}
|
||||
break;
|
||||
case eDecrement:
|
||||
entry->mDelta--;
|
||||
if (mInSavepoint) {
|
||||
entry->mSavepointDelta--;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
NS_NOTREACHED("Unknown update type!");
|
||||
|
@ -1165,6 +1187,16 @@ UpdateRefcountFunction::FileInfoUpdateCallback(const uint64_t& aKey,
|
|||
return PL_DHASH_NEXT;
|
||||
}
|
||||
|
||||
PLDHashOperator
|
||||
UpdateRefcountFunction::RollbackSavepointCallback(const uint64_t& aKey,
|
||||
FileInfoEntry* aValue,
|
||||
void* aUserArg)
|
||||
{
|
||||
aValue->mDelta -= aValue->mSavepointDelta;
|
||||
|
||||
return PL_DHASH_NEXT;
|
||||
}
|
||||
|
||||
bool
|
||||
UpdateRefcountFunction::DatabaseUpdateFunction::Update(int64_t aId,
|
||||
int32_t aDelta)
|
||||
|
|
|
@ -367,12 +367,40 @@ public:
|
|||
NS_DECL_MOZISTORAGEFUNCTION
|
||||
|
||||
UpdateRefcountFunction(FileManager* aFileManager)
|
||||
: mFileManager(aFileManager)
|
||||
: mFileManager(aFileManager), mInSavepoint(false)
|
||||
{ }
|
||||
|
||||
~UpdateRefcountFunction()
|
||||
{ }
|
||||
|
||||
void StartSavepoint()
|
||||
{
|
||||
MOZ_ASSERT(!mInSavepoint);
|
||||
MOZ_ASSERT(!mSavepointEntriesIndex.Count());
|
||||
|
||||
mInSavepoint = true;
|
||||
}
|
||||
|
||||
void ReleaseSavepoint()
|
||||
{
|
||||
MOZ_ASSERT(mInSavepoint);
|
||||
|
||||
mSavepointEntriesIndex.Clear();
|
||||
|
||||
mInSavepoint = false;
|
||||
}
|
||||
|
||||
void RollbackSavepoint()
|
||||
{
|
||||
MOZ_ASSERT(mInSavepoint);
|
||||
|
||||
mInSavepoint = false;
|
||||
|
||||
mSavepointEntriesIndex.EnumerateRead(RollbackSavepointCallback, nullptr);
|
||||
|
||||
mSavepointEntriesIndex.Clear();
|
||||
}
|
||||
|
||||
void ClearFileInfoEntries()
|
||||
{
|
||||
mFileInfoEntries.Clear();
|
||||
|
@ -387,7 +415,7 @@ private:
|
|||
{
|
||||
public:
|
||||
FileInfoEntry(FileInfo* aFileInfo)
|
||||
: mFileInfo(aFileInfo), mDelta(0)
|
||||
: mFileInfo(aFileInfo), mDelta(0), mSavepointDelta(0)
|
||||
{ }
|
||||
|
||||
~FileInfoEntry()
|
||||
|
@ -395,6 +423,7 @@ private:
|
|||
|
||||
nsRefPtr<FileInfo> mFileInfo;
|
||||
int32_t mDelta;
|
||||
int32_t mSavepointDelta;
|
||||
};
|
||||
|
||||
enum UpdateType {
|
||||
|
@ -447,12 +476,20 @@ private:
|
|||
FileInfoEntry* aValue,
|
||||
void* aUserArg);
|
||||
|
||||
static PLDHashOperator
|
||||
RollbackSavepointCallback(const uint64_t& aKey,
|
||||
FileInfoEntry* aValue,
|
||||
void* aUserArg);
|
||||
|
||||
FileManager* mFileManager;
|
||||
nsClassHashtable<nsUint64HashKey, FileInfoEntry> mFileInfoEntries;
|
||||
nsDataHashtable<nsUint64HashKey, FileInfoEntry*> mSavepointEntriesIndex;
|
||||
|
||||
nsTArray<int64_t> mJournalsToCreateBeforeCommit;
|
||||
nsTArray<int64_t> mJournalsToRemoveAfterCommit;
|
||||
nsTArray<int64_t> mJournalsToRemoveAfterAbort;
|
||||
|
||||
bool mInSavepoint;
|
||||
};
|
||||
|
||||
END_INDEXEDDB_NAMESPACE
|
||||
|
|
|
@ -21,7 +21,14 @@
|
|||
getUsage(grabFileUsageAndContinueHandler);
|
||||
let startUsage = yield undefined;
|
||||
|
||||
const fileData = { key: 1, file: getRandomFile("random.bin", 100000) };
|
||||
const fileData1 = {
|
||||
key: 1,
|
||||
obj: { id: 1, file: getRandomFile("random.bin", 100000) }
|
||||
};
|
||||
const fileData2 = {
|
||||
key: 2,
|
||||
obj: { id: 1, file: getRandomFile("random.bin", 100000) }
|
||||
};
|
||||
|
||||
{
|
||||
let request = indexedDB.open(name, 1);
|
||||
|
@ -37,7 +44,14 @@
|
|||
|
||||
let objectStore = db.createObjectStore(objectStoreName, { });
|
||||
|
||||
objectStore.add(fileData.file, fileData.key);
|
||||
objectStore.createIndex("index", "id", { unique: true });
|
||||
|
||||
objectStore.add(fileData1.obj, fileData1.key);
|
||||
|
||||
request = objectStore.add(fileData2.obj, fileData2.key);
|
||||
request.addEventListener("error", new ExpectError("ConstraintError", true));
|
||||
request.onsuccess = unexpectedSuccessHandler;
|
||||
yield undefined;
|
||||
|
||||
event = yield undefined;
|
||||
|
||||
|
@ -46,10 +60,11 @@
|
|||
getUsage(grabFileUsageAndContinueHandler);
|
||||
let usage = yield undefined;
|
||||
|
||||
is(usage, startUsage + fileData.file.size, "Correct file usage");
|
||||
is(usage, startUsage + fileData1.obj.file.size + fileData2.obj.file.size,
|
||||
"Correct file usage");
|
||||
|
||||
let trans = db.transaction([objectStoreName], READ_WRITE);
|
||||
trans.objectStore(objectStoreName).delete(fileData.key);
|
||||
trans.objectStore(objectStoreName).delete(fileData1.key);
|
||||
trans.oncomplete = grabEventAndContinueHandler;
|
||||
event = yield undefined;
|
||||
|
||||
|
@ -58,9 +73,11 @@
|
|||
getUsage(grabFileUsageAndContinueHandler);
|
||||
usage = yield undefined;
|
||||
|
||||
is(usage, startUsage + fileData.file.size, "OS file exists");
|
||||
is(usage, startUsage + fileData1.obj.file.size + fileData2.obj.file.size,
|
||||
"OS files exists");
|
||||
|
||||
fileData.file = null;
|
||||
fileData1.obj.file = null;
|
||||
fileData2.obj.file = null;
|
||||
}
|
||||
|
||||
scheduleGC();
|
||||
|
@ -69,7 +86,7 @@
|
|||
getUsage(grabFileUsageAndContinueHandler);
|
||||
let endUsage = yield undefined;
|
||||
|
||||
is(endUsage, startUsage, "OS file deleted");
|
||||
is(endUsage, startUsage, "OS files deleted");
|
||||
|
||||
finishTest();
|
||||
yield undefined;
|
||||
|
|
|
@ -309,7 +309,7 @@ PreallocatedProcessManagerImpl::PublishSpareProcess(ContentParent* aContent)
|
|||
do_GetService("@mozilla.org/parentprocessmessagemanager;1");
|
||||
nsresult rv = ppmm->BroadcastAsyncMessage(
|
||||
NS_LITERAL_STRING("TEST-ONLY:nuwa-add-new-process"),
|
||||
JSVAL_NULL, JSVAL_NULL, cx, 1);
|
||||
JS::NullHandleValue, JS::NullHandleValue, cx, 1);
|
||||
}
|
||||
|
||||
if (!mNuwaForkWaitTasks.IsEmpty()) {
|
||||
|
@ -362,7 +362,7 @@ PreallocatedProcessManagerImpl::OnNuwaReady()
|
|||
do_GetService("@mozilla.org/parentprocessmessagemanager;1");
|
||||
nsresult rv = ppmm->BroadcastAsyncMessage(
|
||||
NS_LITERAL_STRING("TEST-ONLY:nuwa-ready"),
|
||||
JSVAL_NULL, JSVAL_NULL, cx, 1);
|
||||
JS::NullHandleValue, JS::NullHandleValue, cx, 1);
|
||||
}
|
||||
NuwaFork();
|
||||
}
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
[test_NuwaProcessCreation.html]
|
||||
skip-if = true # re-enable when nuwa is enabled.
|
||||
run-if = toolkit == 'gonk'
|
||||
|
|
|
@ -74,10 +74,18 @@ this.PermissionPromptHelper = {
|
|||
}
|
||||
|
||||
if (permValue == Ci.nsIPermissionManager.PROMPT_ACTION) {
|
||||
// create a nsIContentPermissionRequest
|
||||
let request = {
|
||||
// create an array with a nsIContentPermissionType element
|
||||
let type = {
|
||||
type: msg.type,
|
||||
access: msg.access ? msg.access : "unused",
|
||||
QueryInterface: XPCOMUtils.generateQI([Ci.nsIContentPermissionType])
|
||||
};
|
||||
let typeArray = Cc["@mozilla.org/array;1"].createInstance(Ci.nsIMutableArray);
|
||||
typeArray.appendElement(type, false);
|
||||
|
||||
// create a nsIContentPermissionRequest
|
||||
let request = {
|
||||
types: typeArray,
|
||||
principal: principal,
|
||||
QueryInterface: XPCOMUtils.generateQI([Ci.nsIContentPermissionRequest]),
|
||||
allow: aCallbacks.allow,
|
||||
|
|
|
@ -68,8 +68,17 @@ PermissionPromptService.prototype = {
|
|||
+ "2nd argument must be type 'nsIContentPermissionRequest'");
|
||||
}
|
||||
|
||||
let type = aRequest.access !== "unused" ? aRequest.type + "-" + aRequest.access
|
||||
: aRequest.type;
|
||||
// Only allow exactly one permission request here.
|
||||
let types = aRequest.types.QueryInterface(Ci.nsIArray);
|
||||
if (types.length != 1) {
|
||||
aRequest.cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
let reqType = types.queryElementAt(0, Ci.nsIContentPermissionType);
|
||||
|
||||
let type = reqType.access !== "unused" ? reqType.type + "-" + reqType.access
|
||||
: reqType.type;
|
||||
let perm =
|
||||
permissionManager.testExactPermissionFromPrincipal(aRequest.principal, type);
|
||||
|
||||
|
|
|
@ -635,51 +635,32 @@ doInvoke(NPObject *npobj, NPIdentifier method, const NPVariant *args,
|
|||
fv = OBJECT_TO_JSVAL(npjsobj->mJSObj);
|
||||
}
|
||||
|
||||
JS::Value jsargs_buf[8];
|
||||
JS::Value *jsargs = jsargs_buf;
|
||||
|
||||
if (argCount > (sizeof(jsargs_buf) / sizeof(JS::Value))) {
|
||||
// Our stack buffer isn't large enough to hold all arguments,
|
||||
// malloc a buffer.
|
||||
jsargs = (JS::Value *)PR_Malloc(argCount * sizeof(JS::Value));
|
||||
if (!jsargs) {
|
||||
// Convert args
|
||||
JS::AutoValueVector jsargs(cx);
|
||||
if (!jsargs.reserve(argCount)) {
|
||||
::JS_ReportOutOfMemory(cx);
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
for (uint32_t i = 0; i < argCount; ++i) {
|
||||
jsargs.infallibleAppend(NPVariantToJSVal(npp, cx, args + i));
|
||||
}
|
||||
|
||||
JS::Rooted<JS::Value> v(cx);
|
||||
bool ok;
|
||||
bool ok = false;
|
||||
|
||||
{
|
||||
JS::AutoArrayRooter tvr(cx, 0, jsargs);
|
||||
if (ctorCall) {
|
||||
JSObject *newObj =
|
||||
::JS_New(cx, npjsobj->mJSObj, jsargs.length(), jsargs.begin());
|
||||
|
||||
// Convert args
|
||||
for (uint32_t i = 0; i < argCount; ++i) {
|
||||
jsargs[i] = NPVariantToJSVal(npp, cx, args + i);
|
||||
tvr.changeLength(i + 1);
|
||||
if (newObj) {
|
||||
v.setObject(*newObj);
|
||||
ok = true;
|
||||
}
|
||||
|
||||
if (ctorCall) {
|
||||
JSObject *newObj =
|
||||
::JS_New(cx, npjsobj->mJSObj, argCount, jsargs);
|
||||
|
||||
if (newObj) {
|
||||
v = OBJECT_TO_JSVAL(newObj);
|
||||
ok = true;
|
||||
} else {
|
||||
ok = false;
|
||||
}
|
||||
} else {
|
||||
ok = ::JS_CallFunctionValue(cx, npjsobj->mJSObj, fv, argCount, jsargs, v.address());
|
||||
}
|
||||
|
||||
} else {
|
||||
ok = ::JS_CallFunctionValue(cx, npjsobj->mJSObj, fv, jsargs.length(),
|
||||
jsargs.begin(), v.address());
|
||||
}
|
||||
|
||||
if (jsargs != jsargs_buf)
|
||||
PR_Free(jsargs);
|
||||
|
||||
if (ok)
|
||||
ok = JSValToNPVariant(npp, cx, v, result);
|
||||
|
||||
|
|
|
@ -2423,22 +2423,6 @@ QuotaManager::Observe(nsISupports* aSubject,
|
|||
}
|
||||
}
|
||||
|
||||
// Give clients a chance to cleanup IO thread only objects.
|
||||
nsCOMPtr<nsIRunnable> runnable =
|
||||
NS_NewRunnableMethod(this, &QuotaManager::ReleaseIOThreadObjects);
|
||||
if (!runnable) {
|
||||
NS_WARNING("Failed to create runnable!");
|
||||
}
|
||||
|
||||
if (NS_FAILED(mIOThread->Dispatch(runnable, NS_DISPATCH_NORMAL))) {
|
||||
NS_WARNING("Failed to dispatch runnable!");
|
||||
}
|
||||
|
||||
// Make sure to join with our IO thread.
|
||||
if (NS_FAILED(mIOThread->Shutdown())) {
|
||||
NS_WARNING("Failed to shutdown IO thread!");
|
||||
}
|
||||
|
||||
// Kick off the shutdown timer.
|
||||
if (NS_FAILED(mShutdownTimer->Init(this, DEFAULT_SHUTDOWN_TIMER_MS,
|
||||
nsITimer::TYPE_ONE_SHOT))) {
|
||||
|
@ -2455,6 +2439,22 @@ QuotaManager::Observe(nsISupports* aSubject,
|
|||
if (NS_FAILED(mShutdownTimer->Cancel())) {
|
||||
NS_WARNING("Failed to cancel shutdown timer!");
|
||||
}
|
||||
|
||||
// Give clients a chance to cleanup IO thread only objects.
|
||||
nsCOMPtr<nsIRunnable> runnable =
|
||||
NS_NewRunnableMethod(this, &QuotaManager::ReleaseIOThreadObjects);
|
||||
if (!runnable) {
|
||||
NS_WARNING("Failed to create runnable!");
|
||||
}
|
||||
|
||||
if (NS_FAILED(mIOThread->Dispatch(runnable, NS_DISPATCH_NORMAL))) {
|
||||
NS_WARNING("Failed to dispatch runnable!");
|
||||
}
|
||||
|
||||
// Make sure to join with our IO thread.
|
||||
if (NS_FAILED(mIOThread->Shutdown())) {
|
||||
NS_WARNING("Failed to shutdown IO thread!");
|
||||
}
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
|
|
|
@ -19,6 +19,7 @@ support-files =
|
|||
selectAtPoint.html
|
||||
window_activation.xul
|
||||
window_callback_wrapping.xul
|
||||
window_docshell_swap.xul
|
||||
window_focus.xul
|
||||
window_focus_docnav.xul
|
||||
|
||||
|
@ -32,6 +33,7 @@ support-files =
|
|||
[test_callback_wrapping.xul]
|
||||
[test_clonewrapper.xul]
|
||||
[test_cyclecollector.xul]
|
||||
[test_docshell_swap.xul]
|
||||
[test_focus.xul]
|
||||
[test_focus_docnav.xul]
|
||||
[test_focus_switchbinding.xul]
|
||||
|
|
|
@ -0,0 +1,76 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet type="text/css" href="chrome://global/skin"?>
|
||||
<?xml-stylesheet type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"?>
|
||||
<window title="Docshell swap test"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
|
||||
|
||||
<!-- test results are displayed in the html:body -->
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
|
||||
</body>
|
||||
|
||||
<!-- test code goes here -->
|
||||
<script type="application/javascript">
|
||||
<![CDATA[
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
// Create two identical windows, each with a <browser> element.
|
||||
let win1 = window.openDialog("window_docshell_swap.xul", "_blank","chrome,width=300,height=200");
|
||||
let win2 = window.openDialog("window_docshell_swap.xul", "_blank","chrome,width=300,height=200");
|
||||
|
||||
let loadCount = 0;
|
||||
function loadHandler() {
|
||||
loadCount++;
|
||||
if (loadCount < 2)
|
||||
return;
|
||||
|
||||
let browser1 = win1.document.getElementById("browser");
|
||||
let browser2 = win2.document.getElementById("browser");
|
||||
|
||||
let flo1 = browser1.QueryInterface(Components.interfaces.nsIFrameLoaderOwner);
|
||||
let flo2 = browser2.QueryInterface(Components.interfaces.nsIFrameLoaderOwner);
|
||||
|
||||
let pongCount = 0;
|
||||
|
||||
function gotPong(target_ok) {
|
||||
pongCount++;
|
||||
ok(target_ok, "message went to correct target");
|
||||
if (pongCount == 1) {
|
||||
win1.close();
|
||||
win2.close();
|
||||
SimpleTest.finish();
|
||||
}
|
||||
}
|
||||
|
||||
let mm1 = flo1.frameLoader.messageManager;
|
||||
let mm2 = flo2.frameLoader.messageManager;
|
||||
mm1.addMessageListener("pong", () => { gotPong(true); });
|
||||
mm2.addMessageListener("pong", () => { gotPong(false); });
|
||||
|
||||
// Swap docshells. Everything should be identical to before, since there was nothing to
|
||||
// distinguish these docshells.
|
||||
flo1.swapFrameLoaders(flo2);
|
||||
|
||||
// mm1 shouldn't change here, but we update it in case it does due to a bug.
|
||||
mm1 = flo1.frameLoader.messageManager;
|
||||
|
||||
// Load ping-pong code into first window.
|
||||
mm1.loadFrameScript("data:,addMessageListener('ping', () => sendAsyncMessage('pong'));", false);
|
||||
|
||||
// A pong message received in win1 means success.
|
||||
win1.messageManager.addMessageListener("pong", () => { gotPong(true); });
|
||||
|
||||
// A pong message received in win2 means failure!
|
||||
win2.messageManager.addMessageListener("pong", () => { gotPong(false); });
|
||||
|
||||
// Send the ping to win1.
|
||||
mm1.sendAsyncMessage("ping");
|
||||
}
|
||||
|
||||
win1.addEventListener("load", loadHandler, false);
|
||||
win2.addEventListener("load", loadHandler, false);
|
||||
]]>
|
||||
</script>
|
||||
</window>
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
|
||||
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<browser type="content" src="about:blank" id="browser"/>
|
||||
|
||||
</window>
|
|
@ -25,4 +25,5 @@ interface URLUtilsReadOnly {
|
|||
readonly attribute DOMString pathname;
|
||||
readonly attribute DOMString search;
|
||||
readonly attribute DOMString hash;
|
||||
readonly attribute DOMString origin;
|
||||
};
|
||||
|
|
|
@ -14,7 +14,10 @@
|
|||
|
||||
interface WorkerGlobalScope : EventTarget {
|
||||
readonly attribute WorkerGlobalScope self;
|
||||
|
||||
[Replaceable]
|
||||
readonly attribute WorkerConsole console;
|
||||
|
||||
readonly attribute WorkerLocation location;
|
||||
|
||||
void close();
|
||||
|
|
|
@ -25,7 +25,8 @@ WorkerLocation::Create(WorkerPrivate::LocationInfo& aInfo)
|
|||
NS_ConvertUTF8toUTF16(aInfo.mPort),
|
||||
NS_ConvertUTF8toUTF16(aInfo.mPathname),
|
||||
NS_ConvertUTF8toUTF16(aInfo.mSearch),
|
||||
NS_ConvertUTF8toUTF16(aInfo.mHash));
|
||||
NS_ConvertUTF8toUTF16(aInfo.mHash),
|
||||
aInfo.mOrigin);
|
||||
|
||||
return location.forget();
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@ class WorkerLocation MOZ_FINAL : public nsWrapperCache
|
|||
nsString mPathname;
|
||||
nsString mSearch;
|
||||
nsString mHash;
|
||||
nsString mOrigin;
|
||||
|
||||
WorkerLocation(const nsAString& aHref,
|
||||
const nsAString& aProtocol,
|
||||
|
@ -30,7 +31,8 @@ class WorkerLocation MOZ_FINAL : public nsWrapperCache
|
|||
const nsAString& aPort,
|
||||
const nsAString& aPathname,
|
||||
const nsAString& aSearch,
|
||||
const nsAString& aHash)
|
||||
const nsAString& aHash,
|
||||
const nsAString& aOrigin)
|
||||
: mHref(aHref)
|
||||
, mProtocol(aProtocol)
|
||||
, mHost(aHost)
|
||||
|
@ -39,6 +41,7 @@ class WorkerLocation MOZ_FINAL : public nsWrapperCache
|
|||
, mPathname(aPathname)
|
||||
, mSearch(aSearch)
|
||||
, mHash(aHash)
|
||||
, mOrigin(aOrigin)
|
||||
{
|
||||
MOZ_COUNT_CTOR(WorkerLocation);
|
||||
SetIsDOMBinding();
|
||||
|
@ -100,6 +103,10 @@ public:
|
|||
{
|
||||
aHash = mHash;
|
||||
}
|
||||
void GetOrigin(nsString& aOrigin) const
|
||||
{
|
||||
aOrigin = mOrigin;
|
||||
}
|
||||
};
|
||||
|
||||
END_WORKERS_NAMESPACE
|
||||
|
|
|
@ -3445,6 +3445,8 @@ WorkerPrivateParent<Derived>::SetBaseURI(nsIURI* aBaseURI)
|
|||
else {
|
||||
mLocationInfo.mHost.Assign(mLocationInfo.mHostname);
|
||||
}
|
||||
|
||||
nsContentUtils::GetUTFNonNullOrigin(aBaseURI, mLocationInfo.mOrigin);
|
||||
}
|
||||
|
||||
template <class Derived>
|
||||
|
|
|
@ -131,6 +131,7 @@ public:
|
|||
nsCString mPathname;
|
||||
nsCString mSearch;
|
||||
nsCString mHash;
|
||||
nsString mOrigin;
|
||||
};
|
||||
|
||||
struct LoadInfo
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
/**
|
||||
* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/
|
||||
*/
|
||||
|
||||
onmessage = function(event) {
|
||||
postMessage({event: 'console exists', status: !!console, last : false});
|
||||
console = 42;
|
||||
postMessage({event: 'console is replaceable', status: console === 42, last : true});
|
||||
}
|
|
@ -8,6 +8,7 @@ support-files =
|
|||
close_worker.js
|
||||
content_worker.js
|
||||
console_worker.js
|
||||
consoleReplaceable_worker.js
|
||||
csp_worker.js
|
||||
errorPropagation_iframe.html
|
||||
errorPropagation_worker.js
|
||||
|
@ -75,6 +76,7 @@ support-files =
|
|||
[test_close.html]
|
||||
[test_closeOnGC.html]
|
||||
[test_console.html]
|
||||
[test_consoleReplaceable.html]
|
||||
[test_contentWorker.html]
|
||||
[test_csp.html]
|
||||
[test_csp.html^headers^]
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
<!--
|
||||
Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/
|
||||
-->
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<!--
|
||||
Tests of DOM Worker Console
|
||||
-->
|
||||
<head>
|
||||
<title>Test for DOM Worker Console</title>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
</head>
|
||||
<body>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
|
||||
</div>
|
||||
<pre id="test">
|
||||
<script class="testbody" language="javascript">
|
||||
var worker = new Worker("consoleReplaceable_worker.js");
|
||||
|
||||
worker.onmessage = function(event) {
|
||||
is(event.target, worker, "Worker and target match!");
|
||||
ok(event.data.status, event.data.event);
|
||||
|
||||
if (event.data.last)
|
||||
SimpleTest.finish();
|
||||
};
|
||||
|
||||
worker.onerror = function(event) {
|
||||
ok(false, "Worker had an error: " + event.message);
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
worker.postMessage(true);
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
|
@ -39,7 +39,8 @@ Tests of DOM Worker Location
|
|||
"port": window.location.port,
|
||||
"pathname": basePath + workerFilename,
|
||||
"search": "",
|
||||
"hash": ""
|
||||
"hash": "",
|
||||
"origin": "http://mochi.test:8888"
|
||||
};
|
||||
|
||||
var lastSlash = href.substr(0, queryPos).lastIndexOf("/") + 1;
|
||||
|
|
|
@ -533,8 +533,7 @@ GLReadTexImageHelper::ReadTexImage(GLuint aTextureId,
|
|||
|
||||
ScopedGLState scopedScissorTestState(mGL, LOCAL_GL_SCISSOR_TEST, false);
|
||||
ScopedGLState scopedBlendState(mGL, LOCAL_GL_BLEND, false);
|
||||
|
||||
ScopedViewportRect(mGL, 0, 0, aSize.width, aSize.height);
|
||||
ScopedViewportRect scopedViewportRect(mGL, 0, 0, aSize.width, aSize.height);
|
||||
|
||||
/* Setup renderbuffer */
|
||||
mGL->fGenRenderbuffers(1, &rb);
|
||||
|
|
|
@ -70,7 +70,7 @@ public:
|
|||
JNIEnv* env = GetJNIForThread();
|
||||
|
||||
AutoLocalJNIFrame jniFrame(env);
|
||||
env->CallObjectMethod(aSurfaceTexture, jSurfaceTexture_updateTexImage);
|
||||
env->CallVoidMethod(aSurfaceTexture, jSurfaceTexture_updateTexImage);
|
||||
}
|
||||
|
||||
bool GetTransformMatrix(jobject aSurfaceTexture, gfx::Matrix4x4& aMatrix)
|
||||
|
|
|
@ -1,83 +1,57 @@
|
|||
# HG changeset patch
|
||||
# Parent f0198ba6d08bc0bfc3f67f16ccb54c6f6681ee0c
|
||||
# User Norbert Lindenberg <mozilladev@lindenbergsoftware.com>
|
||||
# Parent a7f3631893c30ca7f1ccf5a36674786566e48103
|
||||
# User Jeff Walden <jwalden@mit.edu>
|
||||
Bug 724533 - Make ICU build with Mozilla build for Windows. r=gps
|
||||
|
||||
diff --git a/intl/icu/source/aclocal.m4 b/intl/icu/source/aclocal.m4
|
||||
--- a/intl/icu/source/aclocal.m4
|
||||
+++ b/intl/icu/source/aclocal.m4
|
||||
@@ -33,17 +33,20 @@ powerpc*-*-linux*)
|
||||
*-*-linux*|*-*-gnu|*-*-k*bsd*-gnu|*-*-kopensolaris*-gnu) icu_cv_host_frag=mh-linux ;;
|
||||
*-*-cygwin|*-*-mingw32)
|
||||
if test "$GCC" = yes; then
|
||||
AC_TRY_COMPILE([
|
||||
#ifndef __MINGW32__
|
||||
#error This is not MinGW
|
||||
#endif], [], icu_cv_host_frag=mh-mingw, icu_cv_host_frag=mh-cygwin)
|
||||
diff --git a/intl/icu/source/acinclude.m4 b/intl/icu/source/acinclude.m4
|
||||
--- a/intl/icu/source/acinclude.m4
|
||||
+++ b/intl/icu/source/acinclude.m4
|
||||
@@ -42,7 +42,10 @@ powerpc*-*-linux*)
|
||||
#error This is not MinGW64
|
||||
#endif], [], icu_cv_host_frag=mh-mingw64, icu_cv_host_frag=mh-mingw), icu_cv_host_frag=mh-cygwin)
|
||||
else
|
||||
- icu_cv_host_frag=mh-cygwin-msvc
|
||||
+ case "${host}" in
|
||||
+ *-*-mingw32) icu_cv_host_frag=mh-msys-msvc ;;
|
||||
+ case "${host}" in
|
||||
+ *-*-cygwin) icu_cv_host_frag=mh-cygwin-msvc ;;
|
||||
+ *-*-mingw32|*-*-mingw64) icu_cv_host_frag=mh-msys-msvc ;;
|
||||
+ esac
|
||||
fi ;;
|
||||
*-*-*bsd*|*-*-dragonfly*) icu_cv_host_frag=mh-bsd-gcc ;;
|
||||
*-*-aix*)
|
||||
if test "$GCC" = yes; then
|
||||
icu_cv_host_frag=mh-aix-gcc
|
||||
else
|
||||
icu_cv_host_frag=mh-aix-va
|
||||
fi ;;
|
||||
@@ -456,27 +459,31 @@ AC_DEFUN(AC_CHECK_STRICT_COMPILE,
|
||||
# We use -std=c99 to disable the gnu99 defaults and its associated warnings
|
||||
CFLAGS="$CFLAGS -Wall -std=c99 -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings"
|
||||
else
|
||||
case "${host}" in
|
||||
*-*-cygwin)
|
||||
@@ -474,7 +477,9 @@ AC_DEFUN([AC_CHECK_STRICT_COMPILE],
|
||||
if test "`$CC /help 2>&1 | head -c9`" = "Microsoft"
|
||||
then
|
||||
CFLAGS="$CFLAGS /W4"
|
||||
- fi
|
||||
+ fi ;;
|
||||
+ *-*-mingw32)
|
||||
+ *-*-mingw32|*-*-mingw64)
|
||||
+ CFLAGS="$CFLAGS -W4" ;;
|
||||
esac
|
||||
fi
|
||||
if test "$GXX" = yes
|
||||
then
|
||||
CXXFLAGS="$CXXFLAGS -W -Wall -pedantic -Wpointer-arith -Wwrite-strings -Wno-long-long"
|
||||
else
|
||||
case "${host}" in
|
||||
*-*-cygwin)
|
||||
@@ -486,7 +491,9 @@ AC_DEFUN([AC_CHECK_STRICT_COMPILE],
|
||||
if test "`$CXX /help 2>&1 | head -c9`" = "Microsoft"
|
||||
then
|
||||
CXXFLAGS="$CXXFLAGS /W4"
|
||||
- fi
|
||||
+ fi ;;
|
||||
+ *-*-mingw32)
|
||||
+ CXXFLAGS="$CXXFLAGS -W4" ;;
|
||||
+ *-*-mingw32|*-*-mingw64)
|
||||
+ CFLAGS="$CFLAGS -W4" ;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
])
|
||||
|
||||
|
||||
diff --git a/intl/icu/source/config/mh-cygwin-msvc b/intl/icu/source/config/mh-msys-msvc
|
||||
copy from intl/icu/source/config/mh-cygwin-msvc
|
||||
copy to intl/icu/source/config/mh-msys-msvc
|
||||
--- a/intl/icu/source/config/mh-cygwin-msvc
|
||||
+++ b/intl/icu/source/config/mh-msys-msvc
|
||||
@@ -1,22 +1,22 @@
|
||||
@@ -1,4 +1,4 @@
|
||||
-## Cygwin with Microsoft Visual C++ compiler specific setup
|
||||
+## MSYS with Microsoft Visual C++ compiler specific setup
|
||||
## Copyright (c) 2001-2012, International Business Machines Corporation and
|
||||
## Copyright (c) 2001-2013, International Business Machines Corporation and
|
||||
## others. All Rights Reserved.
|
||||
|
||||
# We install sbin tools into the same bin directory because
|
||||
# pkgdata needs some of the tools in sbin, and we can't always depend on
|
||||
# icu-config working on Windows.
|
||||
sbindir=$(bindir)
|
||||
|
||||
@@ -10,8 +10,8 @@ sbindir=$(bindir)
|
||||
## Commands to generate dependency files
|
||||
GEN_DEPS.c= :
|
||||
GEN_DEPS.cc= :
|
||||
|
@ -88,17 +62,7 @@ copy to intl/icu/source/config/mh-msys-msvc
|
|||
|
||||
## Flags to create/use a static library
|
||||
ifneq ($(ENABLE_SHARED),YES)
|
||||
## Make sure that the static libraries can be built and used
|
||||
CPPFLAGS += -DU_STATIC_IMPLEMENTATION#M#
|
||||
else
|
||||
## Make sure that the static libraries can be built
|
||||
STATICCPPFLAGS = -DU_STATIC_IMPLEMENTATION
|
||||
@@ -36,63 +36,63 @@ CPPFLAGS+=-DU_RELEASE=1#M#
|
||||
endif
|
||||
|
||||
ifeq ($(ENABLE_DEBUG),1)
|
||||
# Pass debugging flag through
|
||||
CPPFLAGS+=-D_DEBUG=1#M#
|
||||
@@ -41,41 +41,41 @@ CPPFLAGS+=-D_DEBUG=1#M#
|
||||
ICULIBSUFFIX:=$(ICULIBSUFFIX)d#M#
|
||||
endif
|
||||
|
||||
|
@ -154,7 +118,7 @@ copy to intl/icu/source/config/mh-msys-msvc
|
|||
|
||||
# Static library prefix and file extension
|
||||
LIBSICU = $(STATIC_PREFIX)$(ICUPREFIX)
|
||||
A = lib
|
||||
@@ -83,11 +83,11 @@ A = lib
|
||||
|
||||
# Cygwin's ar can't handle Win64 right now. So we use Microsoft's tool instead.
|
||||
AR = LIB.EXE#M#
|
||||
|
@ -169,17 +133,7 @@ copy to intl/icu/source/config/mh-msys-msvc
|
|||
IMPORT_LIB_EXT = .lib
|
||||
|
||||
LIBPREFIX=
|
||||
DEFAULT_LIBS = advapi32.lib
|
||||
|
||||
# Change the stubnames so that poorly working FAT disks and installation programs can work.
|
||||
# This is also for backwards compatibility.
|
||||
DATA_STUBNAME = dt
|
||||
@@ -109,47 +109,35 @@ LIBICUUC= $(LIBDIR)/$(LIBICU)$(COMMON_ST
|
||||
LIBICUI18N= $(LIBDIR)/$(LIBICU)$(I18N_STUBNAME)$(ICULIBSUFFIX).lib
|
||||
LIBICULE= $(LIBDIR)/$(LIBICU)$(LAYOUT_STUBNAME)$(ICULIBSUFFIX).lib
|
||||
LIBICULX= $(LIBDIR)/$(LIBICU)$(LAYOUTEX_STUBNAME)$(ICULIBSUFFIX).lib
|
||||
LIBICUIO= $(LIBDIR)/$(LIBICU)$(IO_STUBNAME)$(ICULIBSUFFIX).lib
|
||||
LIBCTESTFW= $(top_builddir)/tools/ctestfw/$(LIBICU)$(CTESTFW_STUBNAME)$(ICULIBSUFFIX).lib
|
||||
@@ -114,37 +114,25 @@ LIBCTESTFW= $(top_builddir)/tools/ctestf
|
||||
LIBICUTOOLUTIL= $(LIBDIR)/$(LIBICU)$(TOOLUTIL_STUBNAME)$(ICULIBSUFFIX).lib
|
||||
|
||||
## These are the library specific LDFLAGS
|
||||
|
@ -200,7 +154,7 @@ copy to intl/icu/source/config/mh-msys-msvc
|
|||
-
|
||||
-# The #M# is used to delete lines for icu-config
|
||||
-# Current full path directory.
|
||||
-CURR_FULL_DIR=$(subst \,/,$(shell cygpath -da .))#M# -m isn't used because it doesn't work on Win98
|
||||
-CURR_FULL_DIR?=$(subst \,/,$(shell cygpath -da .))#M# -m isn't used because it doesn't work on Win98
|
||||
-# Current full path directory for use in source code in a -D compiler option.
|
||||
-CURR_SRCCODE_FULL_DIR=$(subst \,\\,$(shell cygpath -da .))#M#
|
||||
-
|
||||
|
@ -228,17 +182,7 @@ copy to intl/icu/source/config/mh-msys-msvc
|
|||
|
||||
|
||||
## Dependency rules
|
||||
## This is a start to how depdendencies could work
|
||||
# The commented out rules may not properly delete the file when ^C is pressed
|
||||
# or the compiler fails.
|
||||
# make currently doesn't like rules with C:\\PROGRA~1\\.. in the depedency.
|
||||
# So system headers are ignored by ignoring \\
|
||||
@@ -170,34 +158,34 @@ endif
|
||||
# @echo -n "$@ $(basename $<).o : " > $@
|
||||
# @$(SHELL) -ec '$(GEN_DEPS.cc) $< \
|
||||
# | grep "#line 1 " | grep -v \\\\ | cut -d " " -f 3 \
|
||||
# | /usr/bin/sort -u | sed s/\"$$/\\\\/ | sed s/^\"/\ / >> $@ \
|
||||
# || (rm -f $@ && echo $@ && false)'
|
||||
@@ -175,7 +163,7 @@ endif
|
||||
|
||||
## Compile a Windows resource file
|
||||
%.res : $(srcdir)/%.rc
|
||||
|
@ -247,15 +191,7 @@ copy to intl/icu/source/config/mh-msys-msvc
|
|||
|
||||
## Versioned target for a shared library.
|
||||
FINAL_SO_TARGET= $(basename $(SO_TARGET))$(SO_TARGET_VERSION_MAJOR).$(SO)
|
||||
MIDDLE_SO_TARGET=$(FINAL_SO_TARGET)
|
||||
|
||||
## Starting in MSVC 2005, manifest files are required. This reduces the obnoxiousness of this feature.
|
||||
POST_SO_BUILD_STEP = @([ -e $<.manifest ] && \
|
||||
( echo Embedding manifest into $< && mt.exe -nologo -manifest $<.manifest -outputresource:"$<;2" && rm -rf $<.manifest )) \
|
||||
|| true
|
||||
POST_BUILD_STEP = @([ -e $@.manifest ] && \
|
||||
( echo Embedding manifest into $@ && mt.exe -nologo -manifest $@.manifest -outputresource:"$@;1" && rm -rf $@.manifest )) \
|
||||
|| true
|
||||
@@ -191,8 +179,8 @@ MIDDLE_SO_TARGET=$(FINAL_SO_TARGET)
|
||||
|
||||
## Special pkgdata information that is needed
|
||||
PKGDATA_VERSIONING = -r $(SO_TARGET_VERSION_MAJOR)
|
||||
|
@ -266,17 +202,7 @@ copy to intl/icu/source/config/mh-msys-msvc
|
|||
|
||||
## Versioned import library names. The library names are versioned,
|
||||
## but the import libraries do not need versioning.
|
||||
IMPORT_LIB = $(basename $(SO_TARGET))$(IMPORT_LIB_EXT)#M#
|
||||
MIDDLE_IMPORT_LIB = $(IMPORT_LIB)#M#
|
||||
FINAL_IMPORT_LIB = $(MIDDLE_IMPORT_LIB)#M#
|
||||
|
||||
# The following is for Makefile.inc's use.
|
||||
@@ -220,10 +208,10 @@ INSTALL-L=$(INSTALL_PROGRAM)
|
||||
LDLIBRARYPATH_ENVVAR = PATH
|
||||
|
||||
# These are needed to allow the pkgdata nmake files to work
|
||||
PKGDATA_INVOKE_OPTS = MAKEFLAGS=
|
||||
|
||||
@@ -225,5 +213,5 @@ PKGDATA_INVOKE_OPTS = MAKEFLAGS=
|
||||
# Include the version information in the shared library
|
||||
ENABLE_SO_VERSION_DATA=1
|
||||
|
||||
|
@ -286,70 +212,41 @@ copy to intl/icu/source/config/mh-msys-msvc
|
|||
diff --git a/intl/icu/source/configure b/intl/icu/source/configure
|
||||
--- a/intl/icu/source/configure
|
||||
+++ b/intl/icu/source/configure
|
||||
@@ -4068,29 +4068,33 @@ fi
|
||||
# We use -std=c99 to disable the gnu99 defaults and its associated warnings
|
||||
CFLAGS="$CFLAGS -Wall -std=c99 -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings"
|
||||
else
|
||||
case "${host}" in
|
||||
*-*-cygwin)
|
||||
@@ -4100,7 +4100,9 @@ fi
|
||||
if test "`$CC /help 2>&1 | head -c9`" = "Microsoft"
|
||||
then
|
||||
CFLAGS="$CFLAGS /W4"
|
||||
- fi
|
||||
+ fi ;;
|
||||
+ *-*-mingw32)
|
||||
+ *-*-mingw32|*-*-mingw64)
|
||||
+ CFLAGS="$CFLAGS -W4" ;;
|
||||
esac
|
||||
fi
|
||||
if test "$GXX" = yes
|
||||
then
|
||||
CXXFLAGS="$CXXFLAGS -W -Wall -pedantic -Wpointer-arith -Wwrite-strings -Wno-long-long"
|
||||
else
|
||||
case "${host}" in
|
||||
*-*-cygwin)
|
||||
@@ -4112,7 +4114,9 @@ fi
|
||||
if test "`$CXX /help 2>&1 | head -c9`" = "Microsoft"
|
||||
then
|
||||
CXXFLAGS="$CXXFLAGS /W4"
|
||||
- fi
|
||||
+ fi ;;
|
||||
+ *-*-mingw32)
|
||||
+ CXXFLAGS="$CXXFLAGS -W4" ;;
|
||||
+ *-*-mingw32|*-*-mingw64)
|
||||
+ CFLAGS="$CFLAGS -W4" ;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
# Check if we can build and use 64-bit libraries
|
||||
|
||||
|
||||
@@ -4864,17 +4868,20 @@ main ()
|
||||
_ACEOF
|
||||
if ac_fn_c_try_compile "$LINENO"; then :
|
||||
icu_cv_host_frag=mh-mingw
|
||||
else
|
||||
icu_cv_host_frag=mh-cygwin
|
||||
@@ -4915,7 +4919,10 @@ else
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
else
|
||||
- icu_cv_host_frag=mh-cygwin-msvc
|
||||
+ case "${host}" in
|
||||
+ *-*-mingw32) icu_cv_host_frag=mh-msys-msvc ;;
|
||||
+ case "${host}" in
|
||||
+ *-*-cygwin) icu_cv_host_frag=mh-cygwin-msvc ;;
|
||||
+ *-*-mingw32|*-*-mingw64) icu_cv_host_frag=mh-msys-msvc ;;
|
||||
+ esac
|
||||
fi ;;
|
||||
*-*-*bsd*|*-*-dragonfly*) icu_cv_host_frag=mh-bsd-gcc ;;
|
||||
*-*-aix*)
|
||||
if test "$GCC" = yes; then
|
||||
icu_cv_host_frag=mh-aix-gcc
|
||||
else
|
||||
icu_cv_host_frag=mh-aix-va
|
||||
fi ;;
|
||||
@@ -5106,17 +5113,17 @@ fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enabled" >&5
|
||||
$as_echo "$enabled" >&6; }
|
||||
|
||||
|
||||
# MSVC floating-point option
|
||||
@@ -5157,7 +5164,7 @@ fi
|
||||
MSVC_RELEASE_FLAG=""
|
||||
if test $enabled = yes
|
||||
then
|
||||
|
@ -358,44 +255,22 @@ diff --git a/intl/icu/source/configure b/intl/icu/source/configure
|
|||
then
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
|
||||
#if defined _MSC_VER && _MSC_VER >= 1400
|
||||
#else
|
||||
Microsoft Visual C++ < 2005
|
||||
#endif
|
||||
diff --git a/intl/icu/source/configure.in b/intl/icu/source/configure.in
|
||||
--- a/intl/icu/source/configure.in
|
||||
+++ b/intl/icu/source/configure.in
|
||||
@@ -313,18 +313,18 @@ AC_ARG_ENABLE(auto-cleanup,
|
||||
esac],
|
||||
)
|
||||
AC_MSG_RESULT($enabled)
|
||||
AC_SUBST(UCLN_NO_AUTO_CLEANUP)
|
||||
|
||||
# MSVC floating-point option
|
||||
diff --git a/intl/icu/source/configure.ac b/intl/icu/source/configure.ac
|
||||
--- a/intl/icu/source/configure.ac
|
||||
+++ b/intl/icu/source/configure.ac
|
||||
@@ -330,7 +330,7 @@ AC_SUBST(UCLN_NO_AUTO_CLEANUP)
|
||||
MSVC_RELEASE_FLAG=""
|
||||
if test $enabled = yes
|
||||
-then
|
||||
then
|
||||
- if test $icu_cv_host_frag = mh-cygwin-msvc
|
||||
+then
|
||||
+ if test $icu_cv_host_frag = mh-cygwin-msvc -o $icu_cv_host_frag = mh-msys-msvc
|
||||
then
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
||||
#if defined _MSC_VER && _MSC_VER >= 1400
|
||||
#else
|
||||
Microsoft Visual C++ < 2005
|
||||
#endif
|
||||
]], [[]])],[MSVC_RELEASE_FLAG="/fp:precise"],[MSVC_RELEASE_FLAG="/Op"])
|
||||
|
||||
diff --git a/intl/icu/source/data/Makefile.in b/intl/icu/source/data/Makefile.in
|
||||
--- a/intl/icu/source/data/Makefile.in
|
||||
+++ b/intl/icu/source/data/Makefile.in
|
||||
@@ -345,17 +345,18 @@ GENRBOPTS=-k
|
||||
-include $(MISCSRCDIR)/misclocal.mk
|
||||
MSC_SOURCE= $(MISC_SOURCE) $(MISC_SOURCE_LOCAL)
|
||||
MSC_SRC_FILES=$(MSC_SOURCE:%=$(MISCSRCDIR)/%)
|
||||
|
||||
ifeq ($(ENABLE_SO_VERSION_DATA),1)
|
||||
@@ -350,7 +350,8 @@ ifeq ($(ENABLE_SO_VERSION_DATA),1)
|
||||
ifeq ($(PKGDATA_MODE),dll)
|
||||
SO_VERSION_DATA = $(OUTTMPDIR)/icudata.res
|
||||
$(SO_VERSION_DATA) : $(MISCSRCDIR)/icudata.rc
|
||||
|
@ -405,22 +280,12 @@ diff --git a/intl/icu/source/data/Makefile.in b/intl/icu/source/data/Makefile.in
|
|||
endif
|
||||
endif
|
||||
|
||||
INDEX_NAME=res_index
|
||||
INDEX_FILE=$(OUTTMPDIR)/$(INDEX_NAME).txt
|
||||
|
||||
ALL_RES_SRC= $(RES_SRC) $(TRNS_SOURCE) $(MSC_SOURCE)
|
||||
RES_FILES = $(ALL_RES_SRC:%.txt=$(BUILDDIR)/%.res) $(BUILDDIR)/$(INDEX_NAME).res $(BUILDDIR)/pool.res
|
||||
diff --git a/intl/icu/source/runConfigureICU b/intl/icu/source/runConfigureICU
|
||||
--- a/intl/icu/source/runConfigureICU
|
||||
+++ b/intl/icu/source/runConfigureICU
|
||||
@@ -279,16 +279,27 @@ case $platform in
|
||||
DEBUG_CXXFLAGS='-g -O0'
|
||||
;;
|
||||
MinGW)
|
||||
THE_OS="MinGW"
|
||||
THE_COMP="the GNU C++"
|
||||
RELEASE_CFLAGS='-O3'
|
||||
RELEASE_CXXFLAGS='-O3'
|
||||
@@ -315,6 +315,17 @@ case $platform in
|
||||
CXXFLAGS="--std=c++03"
|
||||
export CXXFLAGS
|
||||
;;
|
||||
+ MSYS/MSVC)
|
||||
+ THE_OS="MSYS"
|
||||
|
@ -436,8 +301,3 @@ diff --git a/intl/icu/source/runConfigureICU b/intl/icu/source/runConfigureICU
|
|||
*BSD)
|
||||
THE_OS="BSD"
|
||||
THE_COMP="the GNU C++"
|
||||
CC=gcc; export CC
|
||||
CXX=g++; export CXX
|
||||
DEBUG_CFLAGS='-g -O0'
|
||||
DEBUG_CXFLAGS='-g -O0'
|
||||
;;
|
||||
|
|
|
@ -1,33 +0,0 @@
|
|||
# HG changeset patch
|
||||
# Parent 7965d384123c42ca0e4e4b18bc3ad73b26369f16
|
||||
# User Norbert Lindenberg <mozilladev@lindenbergsoftware.com>
|
||||
Bug 853706 - Backported fix for formatting 0 with significant digits from ICU.
|
||||
|
||||
diff --git a/intl/icu/source/i18n/decimfmt.cpp b/intl/icu/source/i18n/decimfmt.cpp
|
||||
--- a/intl/icu/source/i18n/decimfmt.cpp
|
||||
+++ b/intl/icu/source/i18n/decimfmt.cpp
|
||||
@@ -1709,16 +1709,24 @@ DecimalFormat::subformat(UnicodeString&
|
||||
}
|
||||
|
||||
// Output grouping separator if necessary.
|
||||
if (isGroupingPosition(i)) {
|
||||
currentLength = appendTo.length();
|
||||
appendTo.append(*grouping);
|
||||
handler.addAttribute(kGroupingSeparatorField, currentLength, appendTo.length());
|
||||
}
|
||||
+ }
|
||||
+
|
||||
+ // This handles the special case of formatting 0. For zero only, we count the
|
||||
+ // zero to the left of the decimal point as one signficant digit. Ordinarily we
|
||||
+ // do not count any leading 0's as significant. If the number we are formatting
|
||||
+ // is not zero, then either sigCount or digits.getCount() will be non-zero.
|
||||
+ if (sigCount == 0 && digits.getCount() == 0) {
|
||||
+ sigCount = 1;
|
||||
}
|
||||
|
||||
// TODO(dlf): this looks like it was a bug, we marked the int field as ending
|
||||
// before the zero was generated.
|
||||
// Record field information for caller.
|
||||
// if (fieldPosition.getField() == NumberFormat::kIntegerField)
|
||||
// fieldPosition.setEndIndex(appendTo.length());
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
Bug 899722 Part 1: Fix ECMAScript intl on BSD by stripping the extra 's' added to the library name, as done on linux. r=norbert
|
||||
|
||||
diff --git a/intl/icu/source/config/mh-bsd-gcc b/intl/icu/source/config/mh-bsd-gcc
|
||||
--- a/intl/icu/source/config/mh-bsd-gcc
|
||||
+++ b/intl/icu/source/config/mh-bsd-gcc
|
||||
@@ -58,10 +58,22 @@ STATIC_O = ao
|
||||
|
||||
## Versioned libraries rules
|
||||
|
||||
%.$(SO).$(SO_TARGET_VERSION_MAJOR): %.$(SO).$(SO_TARGET_VERSION)
|
||||
$(RM) $@ && ln -s ${<F} $@
|
||||
%.$(SO): %.$(SO).$(SO_TARGET_VERSION_MAJOR)
|
||||
$(RM) $@ && ln -s ${*F}.$(SO).$(SO_TARGET_VERSION) $@
|
||||
|
||||
-## End FreeBSD-specific setup
|
||||
+## Bind internal references
|
||||
|
||||
+# LDflags that pkgdata will use
|
||||
+BIR_LDFLAGS= -Wl,-Bsymbolic
|
||||
+
|
||||
+# Dependencies [i.e. map files] for the final library
|
||||
+BIR_DEPS=
|
||||
+
|
||||
+## Remove shared library 's'
|
||||
+STATIC_PREFIX_WHEN_USED =
|
||||
+STATIC_PREFIX =
|
||||
+
|
||||
+## End BSD-specific setup
|
||||
+
|
|
@ -1,110 +0,0 @@
|
|||
Bug 899722 Part 2 - Backport upstream r32937 to fix symbol collision w/ truncate on BSD r=norbert
|
||||
|
||||
http://bugs.icu-project.org/trac/ticket/10290
|
||||
diff --git a/intl/icu/source/tools/genrb/derb.c b/intl/icu/source/tools/genrb/derb.c
|
||||
--- a/intl/icu/source/tools/genrb/derb.c
|
||||
+++ b/intl/icu/source/tools/genrb/derb.c
|
||||
@@ -49,17 +49,17 @@
|
||||
#define DERB_VERSION "1.0"
|
||||
|
||||
#define DERB_DEFAULT_TRUNC 80
|
||||
|
||||
static UConverter *defaultConverter = 0;
|
||||
|
||||
static const int32_t indentsize = 4;
|
||||
static int32_t truncsize = DERB_DEFAULT_TRUNC;
|
||||
-static UBool truncate = FALSE;
|
||||
+static UBool opt_truncate = FALSE;
|
||||
|
||||
static const char *getEncodingName(const char *encoding);
|
||||
static void reportError(const char *pname, UErrorCode *status, const char *when);
|
||||
static UChar *quotedString(const UChar *string);
|
||||
static void printOutBundle(FILE *out, UConverter *converter, UResourceBundle *resource, int32_t indent, const char *pname, UErrorCode *status);
|
||||
static void printString(FILE *out, UConverter *converter, const UChar *str, int32_t len);
|
||||
static void printCString(FILE *out, UConverter *converter, const char *str, int32_t len);
|
||||
static void printIndent(FILE *out, UConverter *converter, int32_t indent);
|
||||
@@ -147,24 +147,24 @@ main(int argc, char* argv[]) {
|
||||
encoding = options[2].value;
|
||||
}
|
||||
|
||||
if (options[3].doesOccur) {
|
||||
tostdout = 1;
|
||||
}
|
||||
|
||||
if(options[4].doesOccur) {
|
||||
- truncate = TRUE;
|
||||
+ opt_truncate = TRUE;
|
||||
if(options[4].value != NULL) {
|
||||
truncsize = atoi(options[4].value); /* user defined printable size */
|
||||
} else {
|
||||
truncsize = DERB_DEFAULT_TRUNC; /* we'll use default omitting size */
|
||||
}
|
||||
} else {
|
||||
- truncate = FALSE;
|
||||
+ opt_truncate = FALSE;
|
||||
}
|
||||
|
||||
if(options[5].doesOccur) {
|
||||
verbose = TRUE;
|
||||
}
|
||||
|
||||
if (options[6].doesOccur) {
|
||||
outputDir = options[6].value;
|
||||
@@ -468,17 +468,17 @@ static void printHex(FILE *out, UConvert
|
||||
printString(out, converter, hex, (int32_t)(sizeof(hex)/sizeof(*hex)));
|
||||
}
|
||||
|
||||
static void printOutAlias(FILE *out, UConverter *converter, UResourceBundle *parent, Resource r, const char *key, int32_t indent, const char *pname, UErrorCode *status) {
|
||||
static const UChar cr[] = { '\n' };
|
||||
int32_t len = 0;
|
||||
const UChar* thestr = res_getAlias(&(parent->fResData), r, &len);
|
||||
UChar *string = quotedString(thestr);
|
||||
- if(truncate && len > truncsize) {
|
||||
+ if(opt_truncate && len > truncsize) {
|
||||
char msg[128];
|
||||
printIndent(out, converter, indent);
|
||||
sprintf(msg, "// WARNING: this resource, size %li is truncated to %li\n",
|
||||
(long)len, (long)truncsize/2);
|
||||
printCString(out, converter, msg, -1);
|
||||
len = truncsize;
|
||||
}
|
||||
if(U_SUCCESS(*status)) {
|
||||
@@ -512,17 +512,17 @@ static void printOutBundle(FILE *out, UC
|
||||
switch(ures_getType(resource)) {
|
||||
case URES_STRING :
|
||||
{
|
||||
int32_t len=0;
|
||||
const UChar* thestr = ures_getString(resource, &len, status);
|
||||
UChar *string = quotedString(thestr);
|
||||
|
||||
/* TODO: String truncation */
|
||||
- if(truncate && len > truncsize) {
|
||||
+ if(opt_truncate && len > truncsize) {
|
||||
char msg[128];
|
||||
printIndent(out, converter, indent);
|
||||
sprintf(msg, "// WARNING: this resource, size %li is truncated to %li\n",
|
||||
(long)len, (long)(truncsize/2));
|
||||
printCString(out, converter, msg, -1);
|
||||
len = truncsize/2;
|
||||
}
|
||||
printIndent(out, converter, indent);
|
||||
@@ -571,17 +571,17 @@ static void printOutBundle(FILE *out, UC
|
||||
}
|
||||
printString(out, converter, cr, (int32_t)(sizeof(cr) / sizeof(*cr)));
|
||||
break;
|
||||
}
|
||||
case URES_BINARY :
|
||||
{
|
||||
int32_t len = 0;
|
||||
const int8_t *data = (const int8_t *)ures_getBinary(resource, &len, status);
|
||||
- if(truncate && len > truncsize) {
|
||||
+ if(opt_truncate && len > truncsize) {
|
||||
char msg[128];
|
||||
printIndent(out, converter, indent);
|
||||
sprintf(msg, "// WARNING: this resource, size %li is truncated to %li\n",
|
||||
(long)len, (long)(truncsize/2));
|
||||
printCString(out, converter, msg, -1);
|
||||
len = truncsize;
|
||||
}
|
||||
if(U_SUCCESS(*status)) {
|
||||
|
|
@ -1,25 +1,14 @@
|
|||
Bug 899722 Part 4: Prevent runConfigureICU from overriding CC/CXX on BSDs.
|
||||
|
||||
diff --git a/intl/icu/source/runConfigureICU b/intl/icu/source/runConfigureICU
|
||||
index 1a476ff..8873cc3 100755
|
||||
--- a/intl/icu/source/runConfigureICU
|
||||
+++ b/intl/icu/source/runConfigureICU
|
||||
@@ -293,18 +293,16 @@ case $platform in
|
||||
RELEASE_CXXFLAGS='-Gy -MD'
|
||||
DEBUG_CFLAGS='-Zi -MDd'
|
||||
DEBUG_CXXFLAGS='-Zi -MDd'
|
||||
DEBUG_LDFLAGS='-DEBUG'
|
||||
;;
|
||||
@@ -329,8 +329,6 @@ case $platform in
|
||||
*BSD)
|
||||
THE_OS="BSD"
|
||||
THE_COMP="the GNU C++"
|
||||
- CC=gcc; export CC
|
||||
- CXX=g++; export CXX
|
||||
DEBUG_CFLAGS='-g -O0'
|
||||
DEBUG_CXFLAGS='-g -O0'
|
||||
DEBUG_CXXFLAGS='-g -O0'
|
||||
;;
|
||||
TRU64V5.1/CXX)
|
||||
THE_OS="OSF1"
|
||||
THE_COMP="Compaq cxx"
|
||||
CC=cc; export CC
|
||||
CXX=cxx; export CXX
|
||||
|
|
|
@ -1,38 +0,0 @@
|
|||
# HG changeset patch
|
||||
# User Nomis101
|
||||
# Date 1380136873 -7200
|
||||
# Wed Sep 25 21:21:13 2013 +0200
|
||||
# Node ID 2921e2256ba8a8ac1ca8b5b0e48eb04511545d41
|
||||
# Parent 39f30376058cf20823534f2d510430eaa31844bf
|
||||
Bug 901348 - [10.9] Duplicate symbol errors building --with-intl-api
|
||||
|
||||
diff --git a/intl/icu/source/common/umutex.h b/intl/icu/source/common/umutex.h
|
||||
--- a/intl/icu/source/common/umutex.h
|
||||
+++ b/intl/icu/source/common/umutex.h
|
||||
@@ -43,26 +43,18 @@
|
||||
# define NOIME
|
||||
# define NOMCX
|
||||
# include <windows.h>
|
||||
#endif /* 0 */
|
||||
#define U_WINDOWS_CRIT_SEC_SIZE 64
|
||||
#endif /* win32 */
|
||||
|
||||
#if U_PLATFORM_IS_DARWIN_BASED
|
||||
-#if defined(__STRICT_ANSI__)
|
||||
-#define UPRV_REMAP_INLINE
|
||||
-#define inline
|
||||
-#endif
|
||||
#include <libkern/OSAtomic.h>
|
||||
#define USE_MAC_OS_ATOMIC_INCREMENT 1
|
||||
-#if defined(UPRV_REMAP_INLINE)
|
||||
-#undef inline
|
||||
-#undef UPRV_REMAP_INLINE
|
||||
-#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* If we do not compile with dynamic_annotations.h then define
|
||||
* empty annotation macros.
|
||||
* See http://code.google.com/p/data-race-test/wiki/DynamicAnnotations
|
||||
*/
|
||||
#ifndef ANNOTATE_HAPPENS_BEFORE
|
|
@ -0,0 +1,136 @@
|
|||
diff --git a/intl/icu/source/tools/genrb/genrb.c b/intl/icu/source/tools/genrb/genrb.c
|
||||
--- a/intl/icu/source/tools/genrb/genrb.c
|
||||
+++ b/intl/icu/source/tools/genrb/genrb.c
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
*******************************************************************************
|
||||
*
|
||||
-* Copyright (C) 1998-2012, International Business Machines
|
||||
+* Copyright (C) 1998-2014, International Business Machines
|
||||
* Corporation and others. All Rights Reserved.
|
||||
*
|
||||
*******************************************************************************
|
||||
@@ -280,7 +280,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
- initParser(options[NO_COLLATION_RULES].doesOccur);
|
||||
+ initParser();
|
||||
|
||||
/*added by Jing*/
|
||||
if(options[LANGUAGE].doesOccur) {
|
||||
@@ -557,7 +557,8 @@
|
||||
printf("autodetected encoding %s\n", cp);
|
||||
}
|
||||
/* Parse the data into an SRBRoot */
|
||||
- data = parse(ucbuf, inputDir, outputDir, !omitBinaryCollation, status);
|
||||
+ data = parse(ucbuf, inputDir, outputDir,
|
||||
+ !omitBinaryCollation, options[NO_COLLATION_RULES].doesOccur, status);
|
||||
|
||||
if (data == NULL || U_FAILURE(*status)) {
|
||||
fprintf(stderr, "couldn't parse the file %s. Error:%s\n", filename,u_errorName(*status));
|
||||
diff --git a/intl/icu/source/tools/genrb/parse.cpp b/intl/icu/source/tools/genrb/parse.cpp
|
||||
--- a/intl/icu/source/tools/genrb/parse.cpp
|
||||
+++ b/intl/icu/source/tools/genrb/parse.cpp
|
||||
@@ -85,10 +85,9 @@
|
||||
const char *outputdir;
|
||||
uint32_t outputdirLength;
|
||||
UBool makeBinaryCollation;
|
||||
+ UBool omitCollationRules;
|
||||
} ParseState;
|
||||
|
||||
-static UBool gOmitCollationRules = FALSE;
|
||||
-
|
||||
typedef struct SResource *
|
||||
ParseResourceFunction(ParseState* state, char *tag, uint32_t startline, const struct UString* comment, UErrorCode *status);
|
||||
|
||||
@@ -323,7 +322,7 @@
|
||||
}
|
||||
uprv_strcat(filename, cs);
|
||||
|
||||
- if(gOmitCollationRules) {
|
||||
+ if(state->omitCollationRules) {
|
||||
return res_none();
|
||||
}
|
||||
|
||||
@@ -771,7 +770,7 @@
|
||||
}
|
||||
|
||||
/* Parse the data into an SRBRoot */
|
||||
- data = parse(ucbuf, genrbdata->inputDir, genrbdata->outputDir, FALSE, status);
|
||||
+ data = parse(ucbuf, genrbdata->inputDir, genrbdata->outputDir, FALSE, FALSE, status);
|
||||
|
||||
root = data->fRoot;
|
||||
collations = resLookup(root, "collations");
|
||||
@@ -1007,7 +1006,7 @@
|
||||
#endif
|
||||
/* in order to achieve smaller data files, we can direct genrb */
|
||||
/* to omit collation rules */
|
||||
- if(gOmitCollationRules) {
|
||||
+ if(state->omitCollationRules) {
|
||||
bundle_closeString(state->bundle, member);
|
||||
} else {
|
||||
table_add(result, member, line, status);
|
||||
@@ -1839,7 +1838,7 @@
|
||||
{"reserved", NULL, NULL}
|
||||
};
|
||||
|
||||
-void initParser(UBool omitCollationRules)
|
||||
+void initParser()
|
||||
{
|
||||
U_STRING_INIT(k_type_string, "string", 6);
|
||||
U_STRING_INIT(k_type_binary, "binary", 6);
|
||||
@@ -1858,8 +1857,6 @@
|
||||
U_STRING_INIT(k_type_plugin_collation, "process(collation)", 18);
|
||||
U_STRING_INIT(k_type_plugin_transliterator, "process(transliterator)", 23);
|
||||
U_STRING_INIT(k_type_plugin_dependency, "process(dependency)", 19);
|
||||
-
|
||||
- gOmitCollationRules = omitCollationRules;
|
||||
}
|
||||
|
||||
static inline UBool isTable(enum EResourceType type) {
|
||||
@@ -2039,8 +2036,8 @@
|
||||
|
||||
/* parse the top-level resource */
|
||||
struct SRBRoot *
|
||||
-parse(UCHARBUF *buf, const char *inputDir, const char *outputDir, UBool makeBinaryCollation,
|
||||
- UErrorCode *status)
|
||||
+parse(UCHARBUF *buf, const char *inputDir, const char *outputDir,
|
||||
+ UBool makeBinaryCollation, UBool omitCollationRules, UErrorCode *status)
|
||||
{
|
||||
struct UString *tokenValue;
|
||||
struct UString comment;
|
||||
@@ -2064,6 +2061,7 @@
|
||||
state.outputdir = outputDir;
|
||||
state.outputdirLength = (state.outputdir != NULL) ? (uint32_t)uprv_strlen(state.outputdir) : 0;
|
||||
state.makeBinaryCollation = makeBinaryCollation;
|
||||
+ state.omitCollationRules = omitCollationRules;
|
||||
|
||||
ustr_init(&comment);
|
||||
expect(&state, TOK_STRING, &tokenValue, &comment, NULL, status);
|
||||
diff --git a/intl/icu/source/tools/genrb/parse.h b/intl/icu/source/tools/genrb/parse.h
|
||||
--- a/intl/icu/source/tools/genrb/parse.h
|
||||
+++ b/intl/icu/source/tools/genrb/parse.h
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
*******************************************************************************
|
||||
*
|
||||
-* Copyright (C) 1998-2011, International Business Machines
|
||||
+* Copyright (C) 1998-2014, International Business Machines
|
||||
* Corporation and others. All Rights Reserved.
|
||||
*
|
||||
*******************************************************************************
|
||||
@@ -24,11 +24,11 @@
|
||||
|
||||
U_CDECL_BEGIN
|
||||
/* One time parser initalisation */
|
||||
-void initParser(UBool omitCollationRules);
|
||||
+void initParser();
|
||||
|
||||
/* Parse a ResourceBundle text file */
|
||||
struct SRBRoot* parse(UCHARBUF *buf, const char* inputDir, const char* outputDir,
|
||||
- UBool omitBinaryCollation, UErrorCode *status);
|
||||
+ UBool makeBinaryCollation, UBool omitCollationRules, UErrorCode *status);
|
||||
|
||||
U_CDECL_END
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
diff --git a/intl/icu/source/common/umutex.h b/intl/icu/source/common/umutex.h
|
||||
--- a/intl/icu/source/common/umutex.h
|
||||
+++ b/intl/icu/source/common/umutex.h
|
||||
@@ -315,17 +315,17 @@ U_NAMESPACE_END
|
||||
# define NOMCX
|
||||
# ifndef NOMINMAX
|
||||
# define NOMINMAX
|
||||
# endif
|
||||
# include <windows.h>
|
||||
|
||||
|
||||
typedef struct UMutex {
|
||||
- UInitOnce fInitOnce;
|
||||
+ icu::UInitOnce fInitOnce;
|
||||
CRITICAL_SECTION fCS;
|
||||
} UMutex;
|
||||
|
||||
/* Initializer for a static UMUTEX. Deliberately contains no value for the
|
||||
* CRITICAL_SECTION.
|
||||
*/
|
||||
#define U_MUTEX_INITIALIZER {U_INITONCE_INITIALIZER}
|
||||
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -1,10 +1,9 @@
|
|||
Path: release-50-1-2
|
||||
URL: http://source.icu-project.org/repos/icu/icu/tags/release-50-1-2
|
||||
Path: release-52-1
|
||||
URL: http://source.icu-project.org/repos/icu/icu/tags/release-52-1
|
||||
Repository Root: http://source.icu-project.org/repos/icu
|
||||
Repository UUID: 251d0590-4201-4cf1-90de-194747b24ca1
|
||||
Revision: 33305
|
||||
Node Kind: directory
|
||||
Last Changed Author: mow
|
||||
Last Changed Rev: 33098
|
||||
Last Changed Date: 2013-01-30 15:54:50 -0800 (Wed, 30 Jan 2013)
|
||||
Last Changed Author: srl
|
||||
Last Changed Rev: 34523
|
||||
Last Changed Date: 2013-10-07 20:40:18 +0000 (Mon, 07 Oct 2013)
|
||||
|
||||
|
|
|
@ -1,38 +0,0 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
# Copyright (C) 2011 IBM Corporation and Others. All Rights Reserved.
|
||||
#
|
||||
# run in icu/
|
||||
# will create file icu/as_is/bomlist.txt
|
||||
#
|
||||
# Usage:
|
||||
# ( python as_is/bomlist.py > as_is/bomlist.txt ) || rm -f as_is/bomlist.txt
|
||||
|
||||
import os
|
||||
import codecs
|
||||
|
||||
tree = os.walk(".")
|
||||
|
||||
nots=0
|
||||
notutf8=0
|
||||
noprops=0
|
||||
utf8=0
|
||||
fixed=0
|
||||
tfiles=0
|
||||
bom=codecs.BOM_UTF8
|
||||
|
||||
|
||||
for ent in tree:
|
||||
(path,dirs,files) = ent
|
||||
if(path.find("/.svn") != -1):
|
||||
continue
|
||||
for file in files:
|
||||
tfiles=tfiles+1
|
||||
fp = (path + "/" + file)
|
||||
if not os.path.isfile(fp):
|
||||
continue
|
||||
f = open(fp, 'rb')
|
||||
bytes=f.read(3)
|
||||
if bytes and (bytes == bom):
|
||||
print 'icu/'+fp[2::]
|
||||
f.close()
|
|
@ -1,102 +0,0 @@
|
|||
#!/bin/sh
|
||||
# Copyright (C) 2001-2010, International Business Machines
|
||||
# Corporation and others. All Rights Reserved.
|
||||
#
|
||||
# Authors:
|
||||
# Ami Fixler
|
||||
# Steven R. Loomis
|
||||
# George Rhoten
|
||||
#
|
||||
# Shell script to unpax ICU and convert the files to an EBCDIC codepage.
|
||||
# After extracting to EBCDIC, binary files are re-extracted without the
|
||||
# EBCDIC conversion, thus restoring them to original codepage.
|
||||
#
|
||||
# Set the following variable to the list of binary file suffixes (extensions)
|
||||
|
||||
#binary_suffixes='ico ICO bmp BMP jpg JPG gif GIF brk BRK'
|
||||
#ICU specific binary files
|
||||
binary_suffixes='brk BRK bin BIN res RES cnv CNV dat DAT icu ICU spp SPP xml XML nrm NRM'
|
||||
|
||||
usage()
|
||||
{
|
||||
echo "Enter archive filename as a parameter: $0 icu-archive.tar"
|
||||
}
|
||||
# first make sure we at least one arg and it's a file we can read
|
||||
if [ $# -eq 0 ]; then
|
||||
usage
|
||||
exit
|
||||
fi
|
||||
tar_file=$1
|
||||
if [ ! -r $tar_file ]; then
|
||||
echo "$tar_file does not exist or cannot be read."
|
||||
usage
|
||||
exit
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Extracting from $tar_file ..."
|
||||
echo ""
|
||||
# extract files while converting them to EBCDIC
|
||||
pax -rvf $tar_file -o to=IBM-1047,from=ISO8859-1 -o setfiletag
|
||||
|
||||
echo ""
|
||||
echo "Determining binary files ..."
|
||||
echo ""
|
||||
|
||||
# When building in ASCII mode, text files are converted as ASCII
|
||||
if [ "${ICU_ENABLE_ASCII_STRINGS}" -eq 1 ]; then
|
||||
binary_suffixes="$binary_suffixes txt TXT ucm UCM"
|
||||
else
|
||||
for file in `find ./icu \( -name \*.txt -print \) | sed -e 's/^\.\///'`; do
|
||||
bom8=`head -c 3 $file|\
|
||||
od -t x1|\
|
||||
head -n 1|\
|
||||
sed 's/ */ /g'|\
|
||||
cut -f2-4 -d ' '|\
|
||||
tr 'A-Z' 'a-z'`;
|
||||
#Find a converted UTF-8 BOM
|
||||
if [ "$bom8" = "57 8b ab" ]
|
||||
then
|
||||
binary_files="$binary_files $file";
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
for i in $(pax -f $tar_file 2>/dev/null)
|
||||
do
|
||||
case $i in
|
||||
*/) ;; # then this entry is a directory
|
||||
*.*) # then this entry has a dot in the filename
|
||||
for j in $binary_suffixes
|
||||
do
|
||||
# We substitute the suffix more than once
|
||||
# to handle files like NormalizationTest-3.2.0.txt
|
||||
suf=${i#*.*}
|
||||
suf=${suf#*.*}
|
||||
suf=${suf#*.*}
|
||||
if [ "$suf" = "$j" ]
|
||||
then
|
||||
binary_files="$binary_files $i"
|
||||
break
|
||||
fi
|
||||
done
|
||||
;;
|
||||
*) ;; # then this entry does not have a dot in it
|
||||
esac
|
||||
done
|
||||
|
||||
# now see if a re-extract of binary files is necessary
|
||||
if [ ${#binary_files} -eq 0 ]; then
|
||||
echo ""
|
||||
echo "There are no binary files to restore."
|
||||
else
|
||||
echo "Restoring binary files ..."
|
||||
echo ""
|
||||
rm $binary_files
|
||||
pax -rvf $tar_file $binary_files
|
||||
# Tag the files as binary for proper interaction with the _BPXK_AUTOCVT
|
||||
# environment setting
|
||||
chtag -b $binary_files
|
||||
fi
|
||||
echo ""
|
||||
echo "$0 has completed extracting ICU from $tar_file."
|
|
@ -1,6 +0,0 @@
|
|||
#!/bin/sh
|
||||
# /* Copyright (C) 2011-2012 IBM Corporation and Others. All Rights Reserved */
|
||||
icc -o iculd iculd.c
|
||||
icc -o cxxfilt cxxfilt.cpp
|
||||
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
# Copyright (C) 2006-2011, International Business Machines Corporation
|
||||
# and others. All Rights Reserved.
|
||||
#
|
||||
# Use "test -x" instead of "test -f" most of the time.
|
||||
# due to how executables are created in a different file system.
|
||||
s/as_executable_p="test -f"/as_executable_p="test -x"/g
|
||||
s/test -f "$ac_file"/test -x "$ac_file"/g
|
||||
s/test -f $ac_dir\/install-sh/test -x $ac_dir\/install-sh/g
|
||||
s/test -f $ac_dir\/install.sh/test -x $ac_dir\/install.sh/g
|
||||
s/test -f $ac_dir\/shtool/test -x $ac_dir\/shtool/g
|
||||
# Use the more efficient del instead of rm command.
|
||||
s/rm[ ]*-r[ ]*-f/del -f/g
|
||||
s/rm[ ]*-f[ ]*-r/del -f/g
|
||||
s/rm[ ]*-rf/del -f/g
|
||||
s/rm[ ]*-fr/del -f/g
|
||||
s/rm[ ]*-f/del -f/g
|
||||
##don't clean up some awks for debugging
|
||||
#s/[ ]*del -f [^ ]*.awk/#&/
|
||||
# Borne shell isn't always available on i5/OS
|
||||
s/\/bin\/sh/\/usr\/bin\/qsh/g
|
||||
# no diff in qsh the equivalent is cmp
|
||||
s/ diff / cmp -s /g
|
||||
## srl
|
||||
# trouble w/ redirects.
|
||||
s% >&$3%%g
|
||||
s% >&$4% >$4%g
|
||||
s%^ac_cr=%# AWK reads ASCII, not EBCDIC\
|
||||
touch -C 819 $tmp/defines.awk $tmp/subs.awk $tmp/subs1.awk conf$$subs.awk\
|
||||
\
|
||||
&%
|
||||
##OBSOLETE
|
||||
#(REPLACED BY CPP in runConfigureICU) Use -c qpponly instead of -E to enable the preprocessor on the compiler
|
||||
#s/\$CC -E/\$CC -c -qpponly/g
|
|
@ -1,37 +0,0 @@
|
|||
/* Copyright (C) 2012 IBM Corporation and Others. All Rights Reserved */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <demangle.h>
|
||||
|
||||
void showSym(char *str) {
|
||||
char *rest;
|
||||
struct Name *name = Demangle(str, rest); // "f__1XFi"
|
||||
|
||||
printf("# '%s'\n", str);
|
||||
if(*rest) printf("\trest: '%s'\n", rest);
|
||||
if(name->Kind() == MemberFunction) {
|
||||
//((MemberFunctionName *) name)->Scope()->Text() is "X"
|
||||
//((MemberFunctionName *) name)->RootName() is "f"
|
||||
//((MemberFunctionName *) name)->Text() is "X::f(int)"
|
||||
printf("\t=> %s\n", ((MemberFunctionName *) name)->Text());
|
||||
} else {
|
||||
printf("\t(not MemberFunction)\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
int main(int argc, /*const*/ char *argv[]) {
|
||||
if(argc>1) {
|
||||
for(int i=1;i<argc;i++) {
|
||||
showSym(argv[i]);
|
||||
}
|
||||
} else {
|
||||
printf("Usage: %s <symbol> ...\n", argv[0]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -1,65 +0,0 @@
|
|||
#!/usr/bin/qsh
|
||||
# Copyright (C) 2000-2011, International Business Machines
|
||||
# Corporation and others. All Rights Reserved.
|
||||
#
|
||||
# Authors:
|
||||
# Ami Fixler
|
||||
# Barry Novinger
|
||||
# Steven R. Loomis
|
||||
# George Rhoten
|
||||
# Jason Spieth
|
||||
#
|
||||
#
|
||||
# This script detects if any UTF-8 files were incorrectly converted to EBCDIC, and
|
||||
# converts them back.
|
||||
|
||||
if [ -z "$QSH_VERSION" ];
|
||||
then
|
||||
QSH=0
|
||||
echo "QSH not detected (QSH_VERSION not set) - just testing."
|
||||
else
|
||||
QSH=1
|
||||
#echo "QSH version $QSH_VERSION"
|
||||
fi
|
||||
export QSH
|
||||
|
||||
tar_file=$1
|
||||
echo ""
|
||||
echo "Determining binary files by BOM ..."
|
||||
echo ""
|
||||
bin_count=0
|
||||
binary_files=""
|
||||
# Process BOMs
|
||||
for file in `find ./icu/source/data/unidata \( -name \*.txt -print \)`; do
|
||||
bom8=`od -t x1 -N 3 $file|\
|
||||
head -n 1|\
|
||||
cut -c10-18`;
|
||||
#Find a converted UTF-8 BOM
|
||||
echo "file $file bom /${bom8}/"
|
||||
if [ "$bom8" = "57 8b ab" ]
|
||||
then
|
||||
file="`echo $file | cut -d / -f2-`"
|
||||
echo "converting ${file}"
|
||||
if [ `echo $binary_files | wc -w` -lt 200 ]
|
||||
then
|
||||
bin_count=`expr $bin_count + 1`
|
||||
binary_files="$binary_files $file";
|
||||
else
|
||||
echo "Restoring binary files by BOM ($bin_count)..."
|
||||
rm $binary_files;
|
||||
pax -C 819 -rvf $tar_file $binary_files;
|
||||
echo "Determining binary files by BOM ($bin_count)..."
|
||||
binary_files="$file";
|
||||
bin_count=`expr $bin_count + 1`
|
||||
fi
|
||||
fi
|
||||
done
|
||||
if [ `echo $binary_files | wc -w` -gt 0 ]
|
||||
then
|
||||
echo restoring
|
||||
rm $binary_files
|
||||
pax -C 819 -rvf $tar_file $binary_files
|
||||
fi
|
||||
|
||||
|
||||
|
|
@ -1,249 +0,0 @@
|
|||
/* Copyright (C) 2011 IBM Corporation and Others. All Rights Reserved */
|
||||
|
||||
/**
|
||||
Input:
|
||||
-o makeconv makeconv.o ucnvstat.o ../../lib/libicuuc48.so -qOPTION='*DUPPROC *DUPVAR*'
|
||||
|
||||
CRTPGM PGM(SRLICU/MAKECONV) MODULE(SRLICU/MAKECONV SRLICU/UCNVSTAT SRLICU/GENMBCS SRLICU/GENCNVEX) BNDSRVPGM(SRLICU/LIBICUUC48 SRLICU/LIBICUTU48 SRLICU/LIBICUIN48) OPTION(*DUPPROC *DUPVAR) REPLACE(*YES)
|
||||
|
||||
Handles .o ( modules ), .so ( srvpgm ), .a ( bnddir ).
|
||||
|
||||
TODO:
|
||||
|
||||
- cleanup
|
||||
- much better error handling
|
||||
- factor common code
|
||||
- instead of caring about .o vs .so vs .a, just read the link - if it ends in .srvpgm then treat it as a service program, etc.
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
|
||||
#ifndef TEST_MODE
|
||||
#define TEST_MODE 0
|
||||
#endif
|
||||
|
||||
|
||||
#if !TEST_MODE
|
||||
#include <qp0z1170.h>
|
||||
#else
|
||||
static int Qp0zSystem(const char *cmd) {
|
||||
printf("CL: %s\n", cmd);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int runcmd(const char *cmd) {
|
||||
int rc;
|
||||
printf("%s\n", cmd);
|
||||
rc = Qp0zSystem(cmd);
|
||||
if(rc==0) {
|
||||
printf("..ok\n");
|
||||
return 0;
|
||||
} else if(rc<0){
|
||||
printf("..Qp0zSystem failed.\n");
|
||||
return 1;
|
||||
} else {
|
||||
printf("..System call failed.\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, const char *argv[]) {
|
||||
int i;
|
||||
|
||||
char buf[8048];
|
||||
char opt[4100];
|
||||
char objs[4024];
|
||||
char libs[4024];
|
||||
char bnddirs[4024];
|
||||
const char *prog="";
|
||||
const char *progshort=prog;
|
||||
const char *outputdir=getenv("OUTPUTDIR");
|
||||
|
||||
printf("# OUTPUTDIR=%s ",outputdir);
|
||||
for(i=0;i<argc;i++) {
|
||||
printf("%s ", argv[i]);
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
buf[0]=0;
|
||||
opt[0]=0;
|
||||
objs[0]=0;
|
||||
libs[0]=0;
|
||||
bnddirs[0]=0;
|
||||
|
||||
for(i=1;i<argc;i++) {
|
||||
if(argv[i][0]=='-') {
|
||||
switch(argv[i][1]) {
|
||||
case 'O':
|
||||
printf(".. ignoring optimization: %s\n", argv[i]);
|
||||
break;
|
||||
case 'g':
|
||||
printf(".. ignoring debugging: %s\n", argv[i]);
|
||||
break;
|
||||
case 'l':
|
||||
printf(".. ignoring lib: %s\n", argv[i]);
|
||||
break;
|
||||
case 'v':
|
||||
printf(".. already verbose\n");
|
||||
break;
|
||||
case 'o':
|
||||
i++;
|
||||
prog=argv[i];
|
||||
progshort=strrchr(prog,'/');
|
||||
if(!progshort) {
|
||||
progshort=prog;
|
||||
} else {
|
||||
progshort++; /* / */
|
||||
}
|
||||
break;
|
||||
case 'q':
|
||||
if(!strncmp(argv[i]+2,"OPTION=",7)) {
|
||||
strcat(opt,argv[i]+9);
|
||||
} else {
|
||||
printf("Unknown -q option: %s\n", argv[i]);
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
printf("Unknown option: %s\n", argv[i]);
|
||||
return 1;
|
||||
}
|
||||
} else {
|
||||
int n = strlen(argv[i]);
|
||||
if(argv[i][n-1]=='o' &&
|
||||
argv[i][n-2]=='.') {
|
||||
const char *b = argv[i];
|
||||
char linkbuf[200];
|
||||
char outbuf[100];
|
||||
int nlen = n-2;
|
||||
|
||||
if(nlen >= 10) {
|
||||
nlen = 10;
|
||||
}
|
||||
|
||||
if(readlink(b,linkbuf,200)>0) {
|
||||
/* printf("linkbuf %s for %s\n", linkbuf, b); */
|
||||
/* /qsys.lib/srlicu.lib/currtest.module */
|
||||
char *mend = strrchr(linkbuf,'.');
|
||||
if(mend) {
|
||||
*mend=0;
|
||||
mend = strrchr(linkbuf,'/');
|
||||
if(mend) {
|
||||
mend++;
|
||||
strcpy(outbuf,mend);
|
||||
b=outbuf;
|
||||
nlen=strlen(b);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/* perror("readlink");
|
||||
puts(b); */
|
||||
}
|
||||
|
||||
strcat(objs,outputdir);
|
||||
strcat(objs,"/");
|
||||
strncat(objs,b,nlen);
|
||||
strcat(objs, " ");
|
||||
} else if(argv[i][n-1]=='a' &&
|
||||
argv[i][n-2]=='.') {
|
||||
const char *b = argv[i];
|
||||
char linkbuf[200];
|
||||
char outbuf[100];
|
||||
int nlen = n-2;
|
||||
|
||||
if(nlen >= 10) {
|
||||
nlen = 10;
|
||||
}
|
||||
|
||||
if(readlink(b,linkbuf,200)>0) {
|
||||
/* printf("linkbuf %s for %s\n", linkbuf, b); */
|
||||
/* /qsys.lib/srlicu.lib/currtest.srvpgm */
|
||||
char *mend = strrchr(linkbuf,'.');
|
||||
if(mend) {
|
||||
*mend=0;
|
||||
mend = strrchr(linkbuf,'/');
|
||||
if(mend) {
|
||||
mend++;
|
||||
strcpy(outbuf,mend);
|
||||
b=outbuf;
|
||||
nlen=strlen(b);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/* perror("readlink");
|
||||
puts(b); */
|
||||
}
|
||||
|
||||
strcat(bnddirs,outputdir);
|
||||
strcat(bnddirs,"/");
|
||||
strncat(bnddirs,b,nlen);
|
||||
strcat(bnddirs, " ");
|
||||
} else if(argv[i][n-1]=='o' &&
|
||||
argv[i][n-2]=='s' &&
|
||||
argv[i][n-3]=='.') {
|
||||
const char *p = strrchr(argv[i],'/');
|
||||
if(!p) {
|
||||
printf("Can't find trailing slash in %s\n", argv[i]);
|
||||
return 1;
|
||||
}
|
||||
strcat(libs,outputdir);
|
||||
strcat(libs,"/");
|
||||
strncat(libs,p+1,strlen(p)-4);
|
||||
strcat(libs," ");
|
||||
} else {
|
||||
printf("Unknown input file: %s\n", argv[i]);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(prog[0]==0) {
|
||||
printf("no program (-o) option specified.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
sprintf(buf,"CRTPGM PGM(%s/%s) MODULE(%s) BNDSRVPGM(%s) BNDDIR(%s) OPTION(%s) REPLACE(*YES)",
|
||||
outputdir,progshort,
|
||||
|
||||
objs,
|
||||
|
||||
libs,
|
||||
|
||||
bnddirs,
|
||||
|
||||
opt);
|
||||
|
||||
|
||||
if(runcmd(buf)) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* -- OK */
|
||||
{
|
||||
char path1[1000];
|
||||
sprintf(path1,"/qsys.lib/%s.lib/%s.pgm",
|
||||
outputdir,
|
||||
progshort);
|
||||
printf("# ln -s %s %s\n", path1, prog);
|
||||
if((!TEST_MODE) && symlink(path1,prog)) {
|
||||
perror("symlink");
|
||||
if(errno!=EEXIST) { /* ignored */
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,160 +0,0 @@
|
|||
#!/usr/bin/qsh
|
||||
# Copyright (C) 2000-2011, International Business Machines
|
||||
# Corporation and others. All Rights Reserved.
|
||||
#
|
||||
# Authors:
|
||||
# Ami Fixler
|
||||
# Barry Novinger
|
||||
# Steven R. Loomis
|
||||
# George Rhoten
|
||||
# Jason Spieth
|
||||
#
|
||||
# Shell script to unpax ICU and convert the files to an EBCDIC codepage.
|
||||
# After extracting to EBCDIC, binary files are re-extracted without the
|
||||
# EBCDIC conversion, thus restoring them to original codepage.
|
||||
|
||||
if [ -z "$QSH_VERSION" ];
|
||||
then
|
||||
QSH=0
|
||||
echo "QSH not detected (QSH_VERSION not set) - just testing."
|
||||
else
|
||||
QSH=1
|
||||
#echo "QSH version $QSH_VERSION"
|
||||
fi
|
||||
export QSH
|
||||
|
||||
# Set the following variable to the list of binary file suffixes (extensions)
|
||||
|
||||
|
||||
#****************************************************************************
|
||||
#binary_suffixes='ico ICO bmp BMP jpg JPG gif GIF brk BRK'
|
||||
#ICU specific binary files
|
||||
#****************************************************************************
|
||||
binary_suffixes='brk BRK bin BIN res RES cnv CNV dat DAT icu ICU spp SPP xml XML nrm NRM'
|
||||
data_files='icu/source/data/brkitr/* icu/source/data/locales/* icu/source/data/coll/* icu/source/data/rbnf/* icu/source/data/mappings/* icu/source/data/misc/* icu/source/data/translit/* icu/source/data/unidata/* icu/source/test/testdata/*'
|
||||
|
||||
#****************************************************************************
|
||||
# Function: usage
|
||||
# Description: Prints out text that describes how to call this script
|
||||
# Input: None
|
||||
# Output: None
|
||||
#****************************************************************************
|
||||
usage()
|
||||
{
|
||||
echo "Enter archive filename as a parameter: $0 icu-archive.tar"
|
||||
}
|
||||
|
||||
#****************************************************************************
|
||||
# first make sure we at least one arg and it's a file we can read
|
||||
#****************************************************************************
|
||||
|
||||
# check for no arguments
|
||||
if [ $# -eq 0 ]; then
|
||||
usage
|
||||
exit
|
||||
fi
|
||||
|
||||
# tar file is argument 1
|
||||
tar_file=$1
|
||||
|
||||
# check that the file is valid
|
||||
if [ ! -r $tar_file ]; then
|
||||
echo "$tar_file does not exist or cannot be read."
|
||||
usage
|
||||
exit
|
||||
fi
|
||||
|
||||
# treat all data files as ebcdic
|
||||
ebcdic_data=$data_files
|
||||
|
||||
#****************************************************************************
|
||||
# Extract files. We do this in two passes. One pass for 819 files and a
|
||||
# second pass for 37 files
|
||||
#****************************************************************************
|
||||
echo ""
|
||||
echo "Extracting from $tar_file ..."
|
||||
echo ""
|
||||
|
||||
# extract everything as iso-8859-1 except these directories
|
||||
pax -C 819 -rcvf $tar_file $ebcdic_data
|
||||
|
||||
# extract files while converting them to EBCDIC
|
||||
echo ""
|
||||
echo "Extracting files which must be in ibm-37 ..."
|
||||
echo ""
|
||||
pax -C 37 -rvf $tar_file $ebcdic_data
|
||||
|
||||
#****************************************************************************
|
||||
# For files we have restored as CCSID 37, check the BOM to see if they
|
||||
# should be processed as 819. Also handle files with special paths. Files
|
||||
# that match will be added to binary files lists. The lists will in turn
|
||||
# be processed to restore files as 819.
|
||||
#****************************************************************************
|
||||
echo ""
|
||||
echo "Determining binary files by BOM ..."
|
||||
echo ""
|
||||
bin_count=0
|
||||
# Process BOMs
|
||||
if [ -f icu/as_is/bomlist.txt ];
|
||||
then
|
||||
echo "Using icu/as_is/bomlist.txt"
|
||||
pax -C 819 -rvf $tar_file `cat icu/as_is/bomlist.txt`
|
||||
else
|
||||
for file in `find ./icu \( -name \*.txt -print \)`; do
|
||||
bom8=`head -n 1 $file|\
|
||||
od -t x1|\
|
||||
head -n 1|\
|
||||
sed 's/ */ /g'|\
|
||||
cut -f2-4 -d ' '|\
|
||||
tr 'A-Z' 'a-z'`;
|
||||
#Find a converted UTF-8 BOM
|
||||
if [ "$bom8" = "057 08b 0ab" -o "$bom8" = "57 8b ab" ]
|
||||
then
|
||||
file="`echo $file | cut -d / -f2-`"
|
||||
|
||||
if [ `echo $binary_files | wc -w` -lt 200 ]
|
||||
then
|
||||
bin_count=`expr $bin_count + 1`
|
||||
binary_files="$binary_files $file";
|
||||
else
|
||||
echo "Restoring binary files by BOM ($bin_count)..."
|
||||
rm $binary_files;
|
||||
pax -C 819 -rvf $tar_file $binary_files;
|
||||
echo "Determining binary files by BOM ($bin_count)..."
|
||||
binary_files="$file";
|
||||
bin_count=`expr $bin_count + 1`
|
||||
fi
|
||||
fi
|
||||
done
|
||||
# now see if a re-extract of binary files is necessary
|
||||
if [ `echo $binary_files | wc -w` -gt 0 ]
|
||||
then
|
||||
echo "Restoring binary files ($bin_count) ..."
|
||||
rm $binary_files
|
||||
pax -C 819 -rvf $tar_file $binary_files
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "# Processing special paths."
|
||||
# Process special paths
|
||||
more_bin_files=$(find icu -type f \( -name '*.zzz' `echo $binary_suffixes | sed -e 's%[a-zA-Z]*%-o -name \*.&%g'` \) -print)
|
||||
echo "Restoring binary files by special paths ($bin_count) ..."
|
||||
rm $more_bin_files
|
||||
pax -C 819 -rvf $tar_file $more_bin_files
|
||||
|
||||
#****************************************************************************
|
||||
# Generate and run the configure script
|
||||
#****************************************************************************
|
||||
|
||||
echo ""
|
||||
echo "Generating qsh compatible configure ..."
|
||||
echo ""
|
||||
|
||||
sed -f icu/as_is/os400/convertConfigure.sed icu/source/configure > icu/source/configureTemp
|
||||
del -f icu/source/configure
|
||||
mv icu/source/configureTemp icu/source/configure
|
||||
chmod 755 icu/source/configure
|
||||
|
||||
echo ""
|
||||
echo "$0 has completed extracting ICU from $tar_file - $bin_count binary files extracted."
|
||||
|
|
@ -1,472 +0,0 @@
|
|||
/*
|
||||
* Default CSS style sheet for the ICU4C Open Source readme
|
||||
* Copyright (C) 2005-2011, International Business Machines
|
||||
* Corporation and others. All Rights Reserved.
|
||||
*/
|
||||
|
||||
/* Global styles */
|
||||
|
||||
body,p,li,ol,ul,th,td {
|
||||
font-size: 1em;
|
||||
font-family: "Arial", "Helvetica", sans-serif;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 1em;
|
||||
}
|
||||
|
||||
body.draft {
|
||||
background-image: url(images/draftbg.png);
|
||||
}
|
||||
|
||||
.mainbody {
|
||||
padding: 1em;
|
||||
}
|
||||
|
||||
/*
|
||||
* Customize the headers to have less space around them than usual
|
||||
*/
|
||||
|
||||
h1 {
|
||||
margin-bottom: .5em;
|
||||
margin-top: .5em;
|
||||
padding-bottom: .5em;
|
||||
padding-top: .5em;
|
||||
font-weight: 700;
|
||||
font-size: 20pt;
|
||||
font-family: Georgia, "Times New Roman", Times, serif;
|
||||
border-width: 2px;
|
||||
border-style: solid;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
font-size: 200%;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
h2 {
|
||||
border-top: 2px solid #22d;
|
||||
border-left: 2px solid #22d;
|
||||
margin-bottom: 0.5em;
|
||||
padding-left: 4px;
|
||||
margin-top: 12pt;
|
||||
font-weight: 700;
|
||||
font-size: 2em;
|
||||
font-family: Georgia, "Times New Roman", Times, serif;
|
||||
background-color: #eee;
|
||||
page-break-before: always;
|
||||
}
|
||||
|
||||
h2 a {
|
||||
text-decoration: none;
|
||||
color: black;
|
||||
}
|
||||
|
||||
h2 a:hover {
|
||||
color: blue;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
h3 {
|
||||
border-top: 1px solid gray;
|
||||
color: #1e1c46;
|
||||
margin-bottom: 0pt;
|
||||
margin-top: 12pt;
|
||||
padding-left: 0;
|
||||
margin-left: 1em;
|
||||
margin-top: 0.2em;
|
||||
padding-bottom: 0.4em;
|
||||
font-size: 1.5em;
|
||||
font-family: Georgia, "Times New Roman", Times, serif;
|
||||
}
|
||||
|
||||
h3 a {
|
||||
text-decoration: none;
|
||||
color: black;
|
||||
}
|
||||
|
||||
h3 a:hover {
|
||||
color: blue;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
h4 {
|
||||
margin-left: 1.5em;
|
||||
margin-bottom: 0pt;
|
||||
margin-top: 12pt;
|
||||
font-size: 1.0em;
|
||||
font-weight: bolder;
|
||||
font-family: Georgia, "Times New Roman", Times, serif;
|
||||
}
|
||||
|
||||
h4 a {
|
||||
text-decoration: none;
|
||||
color: black;
|
||||
}
|
||||
|
||||
h4 a:hover {
|
||||
color: blue;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
h5, h6 {
|
||||
margin-left: 1.8em;
|
||||
margin-bottom: 0pt;
|
||||
margin-top: 12pt;
|
||||
padding-left: 0.75em;
|
||||
font-size: x-small;
|
||||
font-family: Georgia, "Times New Roman", Times, serif;
|
||||
}
|
||||
|
||||
p,pre,table,ul,ol,dl {
|
||||
margin-left: 2em;
|
||||
}
|
||||
|
||||
/*
|
||||
* Navigation sidebar on the left hand of most pages
|
||||
*/
|
||||
|
||||
td.sidebar1 {
|
||||
background-color: #99CCFF;
|
||||
font-weight: 700;
|
||||
margin-top: 0px;
|
||||
margin-bottom: 0px;
|
||||
padding-top: 1em;
|
||||
padding-left: 0.2em;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
td.sidebar2 {
|
||||
background-color: #99CCFF;
|
||||
margin-top: 0px;
|
||||
margin-bottom: 0px;
|
||||
margin-left: 0px;
|
||||
padding-top: 1px;
|
||||
padding-bottom: 1px;
|
||||
padding-left: 1px;
|
||||
padding-right: 0.5em;
|
||||
white-space: nowrap;
|
||||
text-decoration: none;
|
||||
display: block;
|
||||
}
|
||||
|
||||
td.sidebar2:hover {
|
||||
background-color: #EEEEFF;
|
||||
padding-top: 1px;
|
||||
padding-bottom: 1px;
|
||||
padding-left: 1px;
|
||||
padding-right: 0.5em;
|
||||
}
|
||||
|
||||
a.sidebar2 {
|
||||
text-decoration: none;
|
||||
display: block;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
a.sidebar2:link {
|
||||
color: #000099;
|
||||
display: block;
|
||||
}
|
||||
|
||||
a.sidebar2:hover {
|
||||
background-color: #EEEEFF;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.underlinehover:hover {
|
||||
background-color: #EEEEFF;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* This is the faded header at the top */
|
||||
|
||||
td.fadedtop {
|
||||
background-color: #006699;
|
||||
background-image: url(http://www.icu-project.org/images/gr100.gif);
|
||||
}
|
||||
|
||||
/* Related site on the left */
|
||||
|
||||
p.relatedsite {
|
||||
color: White;
|
||||
font-weight: 700;
|
||||
font-size: 10pt;
|
||||
margin-top: 1em;
|
||||
margin-bottom: 0;
|
||||
padding-left: 0.2em;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/* Related site on the left */
|
||||
|
||||
p.sidebar3 {
|
||||
margin-top: 0.75em;
|
||||
margin-bottom: 0;
|
||||
padding-left: 0.8em;
|
||||
}
|
||||
|
||||
a.sidebar3 {
|
||||
font-size: 0.9em;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a.sidebar3:link {
|
||||
text-decoration: none;
|
||||
color: White;
|
||||
}
|
||||
|
||||
a.sidebar3:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* FAQ */
|
||||
|
||||
li.faq_contents {
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
p.faq_q {
|
||||
font-weight: 700;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
p.faq_a {
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
/* News items */
|
||||
|
||||
table.newsItem {
|
||||
padding-left: 1em;
|
||||
padding-right: 1em;
|
||||
border-width: medium;
|
||||
}
|
||||
|
||||
th.newsItem {
|
||||
background-color: #666666;
|
||||
color: White;
|
||||
}
|
||||
|
||||
td.newsItem {
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
|
||||
td.release-line,th.release-line {
|
||||
padding-left: 0.5em;
|
||||
padding-right: 0.5em;
|
||||
white-space: nowrap;
|
||||
border: 1px;
|
||||
}
|
||||
|
||||
.note {
|
||||
font-style: italic;
|
||||
font-size: small;
|
||||
margin-left: 1em;
|
||||
}
|
||||
|
||||
samp {
|
||||
margin-left: 1em;
|
||||
margin-right: 2em;
|
||||
border-style: groove;
|
||||
padding: 1em;
|
||||
display: block;
|
||||
background-color: #EEEEEE
|
||||
}
|
||||
|
||||
table.rtable caption {
|
||||
margin-left: 2px;
|
||||
margin-right: 2px;
|
||||
padding: 3px;
|
||||
font-weight: bold;
|
||||
background-color: #dee2ff;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
table.rtable tr th {
|
||||
background-color: #dee2ff;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
table.rtable tr td {
|
||||
background-color: #c0c0fd;
|
||||
padding: 3px;
|
||||
}
|
||||
|
||||
table.rtable tr.broken td {
|
||||
background-color: #fbb;
|
||||
border: 1px dashed gray;
|
||||
padding: 3px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
table.rtable tr.rarely td {
|
||||
background-color: #efe9c2;
|
||||
padding: 3px;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* APIChangeReport specific things */
|
||||
|
||||
.row0 {
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
.row1 {
|
||||
background-color: #dfd;
|
||||
}
|
||||
|
||||
.verchange {
|
||||
color: red;
|
||||
font-weight: bold;
|
||||
font-size: large;
|
||||
}
|
||||
|
||||
.stabchange {
|
||||
color: red;
|
||||
font-size: large;
|
||||
}
|
||||
|
||||
.bigwarn {
|
||||
color: red;
|
||||
background-color: white;
|
||||
font-size: large;
|
||||
margin: 0.5 em;
|
||||
}
|
||||
|
||||
|
||||
td.bornstable {
|
||||
|
||||
}
|
||||
td.bornstable .bigwarn {
|
||||
font-size: small;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
table.genTable {
|
||||
border-collapse: collapse;
|
||||
border: 1px solid black;
|
||||
}
|
||||
|
||||
/* 'everything inc version */
|
||||
|
||||
table.gentable td {
|
||||
border: 1px solid gray;
|
||||
padding: 0.25em;
|
||||
font-size: small;
|
||||
}
|
||||
|
||||
/* not version */
|
||||
|
||||
table.genTable td.file,
|
||||
table.genTable td.proto {
|
||||
border: none;
|
||||
font-size: medium;
|
||||
}
|
||||
|
||||
table.genTable td.file {
|
||||
font-family: monospace;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
div.other .row0 {
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
div.other .row1 {
|
||||
background-color: #ddf;
|
||||
}
|
||||
|
||||
table.docTable {
|
||||
border-collapse: collapse;
|
||||
border: 1px solid black;
|
||||
}
|
||||
|
||||
/* 'everything inc version */
|
||||
|
||||
table.docTable td,
|
||||
table.docTable th {
|
||||
border: 1px solid gray;
|
||||
padding: 0.25em;
|
||||
font-size: small;
|
||||
}
|
||||
|
||||
/* not version */
|
||||
|
||||
table.docTable td.file,
|
||||
table.docTable td.proto {
|
||||
border: none;
|
||||
font-size: medium;
|
||||
}
|
||||
|
||||
table.docTable td.file {
|
||||
font-family: monospace;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
abbr {
|
||||
border-bottom: 1px dashed #0B0;
|
||||
}
|
||||
|
||||
h2.TOC {
|
||||
page-break-before: auto;
|
||||
}
|
||||
|
||||
body.readme {
|
||||
|
||||
}
|
||||
|
||||
caption {
|
||||
font-weight: bold;
|
||||
text-align: left
|
||||
}
|
||||
|
||||
div.indent {
|
||||
margin-left: 2em
|
||||
}
|
||||
|
||||
ul.TOC {
|
||||
list-style-type: none;
|
||||
padding-left: 1em;
|
||||
font-size: larger;
|
||||
}
|
||||
|
||||
ul.TOC li a {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
ul.TOC li ul li a {
|
||||
font-weight: normal;
|
||||
list-style-type: none;
|
||||
font-size: small;
|
||||
}
|
||||
|
||||
ul.TOC li ul {
|
||||
margin-left: 0;
|
||||
padding-left: 2em;
|
||||
font-weight: normal;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
pre.samp,samp {
|
||||
margin-left: 1em;
|
||||
border-style: groove;
|
||||
padding: 1em;
|
||||
display: block;
|
||||
background-color: #EEEEEE
|
||||
}
|
||||
|
||||
td.proto {
|
||||
font-size: smaller;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@media print {
|
||||
div#toc {
|
||||
display: none;
|
||||
}
|
||||
|
||||
table,tr,td,div {
|
||||
page-break-inside: auto;
|
||||
}
|
||||
}
|
|
@ -1,307 +0,0 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||
"http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
|
||||
<title>ICU License - ICU 1.8.1 and later</title>
|
||||
</head>
|
||||
|
||||
<body BGCOLOR="#ffffff">
|
||||
<h2>ICU License - ICU 1.8.1 and later</h2>
|
||||
|
||||
<p>COPYRIGHT AND PERMISSION NOTICE</p>
|
||||
|
||||
<p>
|
||||
Copyright (c) 1995-2012 International Business Machines Corporation and others
|
||||
</p>
|
||||
<p>
|
||||
All rights reserved.
|
||||
</p>
|
||||
<p>
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, and/or sell
|
||||
copies of the Software, and to permit persons
|
||||
to whom the Software is furnished to do so, provided that the above
|
||||
copyright notice(s) and this permission notice appear in all copies
|
||||
of the Software and that both the above copyright notice(s) and this
|
||||
permission notice appear in supporting documentation.
|
||||
</p>
|
||||
<p>
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL
|
||||
THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM,
|
||||
OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER
|
||||
RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
|
||||
USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
</p>
|
||||
<p>
|
||||
Except as contained in this notice, the name of a copyright holder shall not be
|
||||
used in advertising or otherwise to promote the sale, use or other dealings in
|
||||
this Software without prior written authorization of the copyright holder.
|
||||
</p>
|
||||
|
||||
<hr style="color:gray;background-color:gray">
|
||||
<p><small>
|
||||
All trademarks and registered trademarks mentioned herein are the property of their respective owners.
|
||||
</small></p>
|
||||
|
||||
<hr style="height:3px;color:black;background-color:black">
|
||||
|
||||
<h2>Third-Party Software Licenses</h2>
|
||||
This section contains third-party software notices and/or additional terms for licensed
|
||||
third-party software components included within ICU libraries.
|
||||
|
||||
<h3>1. Unicode Data Files and Software</h3>
|
||||
|
||||
<h3 align="center"><a name="Exhibit1">EXHIBIT 1</a><br>
|
||||
UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE</h3>
|
||||
<blockquote>
|
||||
<p>Unicode Data Files include all data files under the directories
|
||||
<a href="http://www.unicode.org/Public/">http://www.unicode.org/Public/</a>,
|
||||
<a href="http://www.unicode.org/reports/">http://www.unicode.org/reports/</a>,
|
||||
and
|
||||
<a title="http://www.unicode.org/cldr/data/" onClick="return top.js.OpenExtLink(window,event,this)" target="_blank" href="http://www.unicode.org/cldr/data/">
|
||||
http://www.unicode.org/cldr/data/</a>. Unicode Data Files do not include PDF online code charts under the directory <a href="http://www.unicode.org/Public/">http://www.unicode.org/Public/</a>. Software includes any source code
|
||||
published in the Unicode Standard or under the directories <a href="http://www.unicode.org/Public/">http://www.unicode.org/Public/</a>,
|
||||
<a href="http://www.unicode.org/reports/">http://www.unicode.org/reports/</a>,
|
||||
and
|
||||
<a title="http://www.unicode.org/cldr/data/" onClick="return top.js.OpenExtLink(window,event,this)" target="_blank" href="http://www.unicode.org/cldr/data/">
|
||||
http://www.unicode.org/cldr/data/</a>.</p>
|
||||
|
||||
<p>NOTICE TO USER: Carefully read the following legal agreement. BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.</p>
|
||||
<p>COPYRIGHT AND PERMISSION NOTICE</p>
|
||||
|
||||
<p>Copyright © 1991-2012 Unicode, Inc. All rights reserved. Distributed under the Terms of Use in
|
||||
<a href="http://www.unicode.org/copyright.html">http://www.unicode.org/copyright.html</a>.</p>
|
||||
|
||||
<p>Permission is hereby granted, free of charge, to any person obtaining a copy of the Unicode data files and
|
||||
any associated documentation (the "Data Files") or Unicode software and any associated documentation (the "Software") to deal in the Data Files or Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Data Files or Software, and to permit persons to whom the Data Files or Software are furnished to do so, provided that (a) the above copyright notice(s) and this permission notice appear
|
||||
with all copies of the Data Files or Software, (b) both the above copyright notice(s) and this permission notice appear in associated documentation, and (c) there is clear notice in each modified Data File or in the Software as well as in the documentation associated with the Data File(s) or Software that the data or software has been modified.</p>
|
||||
|
||||
<p>THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THE DATA FILES OR SOFTWARE.</p>
|
||||
|
||||
<p>Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in these Data Files or Software without prior written authorization of the copyright holder.</p>
|
||||
|
||||
<hr width="80%">
|
||||
|
||||
<p>Unicode and the Unicode logo are trademarks of Unicode, Inc. in the United States and other countries. All third party trademarks referenced herein are the property of their respective owners.</p>
|
||||
|
||||
|
||||
</blockquote>
|
||||
|
||||
<h3>2. Chinese/Japanese Word Break Dictionary Data (cjdict.txt)</h3>
|
||||
<pre>
|
||||
# The Google Chrome software developed by Google is licensed under the BSD license. Other software included in this distribution is provided under other licenses, as set forth below.
|
||||
#
|
||||
# The BSD License
|
||||
# http://opensource.org/licenses/bsd-license.php
|
||||
# Copyright (C) 2006-2008, Google Inc.
|
||||
#
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||
# Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
# Neither the name of Google Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
||||
#
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
#
|
||||
# The word list in cjdict.txt are generated by combining three word lists listed
|
||||
# below with further processing for compound word breaking. The frequency is generated
|
||||
# with an iterative training against Google web corpora.
|
||||
#
|
||||
# * Libtabe (Chinese)
|
||||
# - https://sourceforge.net/project/?group_id=1519
|
||||
# - Its license terms and conditions are shown below.
|
||||
#
|
||||
# * IPADIC (Japanese)
|
||||
# - http://chasen.aist-nara.ac.jp/chasen/distribution.html
|
||||
# - Its license terms and conditions are shown below.
|
||||
#
|
||||
# ---------COPYING.libtabe ---- BEGIN--------------------
|
||||
#
|
||||
# /*
|
||||
# * Copyrighy (c) 1999 TaBE Project.
|
||||
# * Copyright (c) 1999 Pai-Hsiang Hsiao.
|
||||
# * All rights reserved.
|
||||
# *
|
||||
# * Redistribution and use in source and binary forms, with or without
|
||||
# * modification, are permitted provided that the following conditions
|
||||
# * are met:
|
||||
# *
|
||||
# * . Redistributions of source code must retain the above copyright
|
||||
# * notice, this list of conditions and the following disclaimer.
|
||||
# * . Redistributions in binary form must reproduce the above copyright
|
||||
# * notice, this list of conditions and the following disclaimer in
|
||||
# * the documentation and/or other materials provided with the
|
||||
# * distribution.
|
||||
# * . Neither the name of the TaBE Project nor the names of its
|
||||
# * contributors may be used to endorse or promote products derived
|
||||
# * from this software without specific prior written permission.
|
||||
# *
|
||||
# * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
# * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
# * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
# * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
# * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
# * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
# * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
# * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
# * OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
# */
|
||||
#
|
||||
# /*
|
||||
# * Copyright (c) 1999 Computer Systems and Communication Lab,
|
||||
# * Institute of Information Science, Academia Sinica.
|
||||
# * All rights reserved.
|
||||
# *
|
||||
# * Redistribution and use in source and binary forms, with or without
|
||||
# * modification, are permitted provided that the following conditions
|
||||
# * are met:
|
||||
# *
|
||||
# * . Redistributions of source code must retain the above copyright
|
||||
# * notice, this list of conditions and the following disclaimer.
|
||||
# * . Redistributions in binary form must reproduce the above copyright
|
||||
# * notice, this list of conditions and the following disclaimer in
|
||||
# * the documentation and/or other materials provided with the
|
||||
# * distribution.
|
||||
# * . Neither the name of the Computer Systems and Communication Lab
|
||||
# * nor the names of its contributors may be used to endorse or
|
||||
# * promote products derived from this software without specific
|
||||
# * prior written permission.
|
||||
# *
|
||||
# * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
# * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
# * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
# * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
# * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
# * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
# * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
# * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
# * OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
# */
|
||||
#
|
||||
# Copyright 1996 Chih-Hao Tsai @ Beckman Institute, University of Illinois
|
||||
# c-tsai4@uiuc.edu http://casper.beckman.uiuc.edu/~c-tsai4
|
||||
#
|
||||
# ---------------COPYING.libtabe-----END------------------------------------
|
||||
#
|
||||
#
|
||||
# ---------------COPYING.ipadic-----BEGIN------------------------------------
|
||||
#
|
||||
# Copyright 2000, 2001, 2002, 2003 Nara Institute of Science
|
||||
# and Technology. All Rights Reserved.
|
||||
#
|
||||
# Use, reproduction, and distribution of this software is permitted.
|
||||
# Any copy of this software, whether in its original form or modified,
|
||||
# must include both the above copyright notice and the following
|
||||
# paragraphs.
|
||||
#
|
||||
# Nara Institute of Science and Technology (NAIST),
|
||||
# the copyright holders, disclaims all warranties with regard to this
|
||||
# software, including all implied warranties of merchantability and
|
||||
# fitness, in no event shall NAIST be liable for
|
||||
# any special, indirect or consequential damages or any damages
|
||||
# whatsoever resulting from loss of use, data or profits, whether in an
|
||||
# action of contract, negligence or other tortuous action, arising out
|
||||
# of or in connection with the use or performance of this software.
|
||||
#
|
||||
# A large portion of the dictionary entries
|
||||
# originate from ICOT Free Software. The following conditions for ICOT
|
||||
# Free Software applies to the current dictionary as well.
|
||||
#
|
||||
# Each User may also freely distribute the Program, whether in its
|
||||
# original form or modified, to any third party or parties, PROVIDED
|
||||
# that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear
|
||||
# on, or be attached to, the Program, which is distributed substantially
|
||||
# in the same form as set out herein and that such intended
|
||||
# distribution, if actually made, will neither violate or otherwise
|
||||
# contravene any of the laws and regulations of the countries having
|
||||
# jurisdiction over the User or the intended distribution itself.
|
||||
#
|
||||
# NO WARRANTY
|
||||
#
|
||||
# The program was produced on an experimental basis in the course of the
|
||||
# research and development conducted during the project and is provided
|
||||
# to users as so produced on an experimental basis. Accordingly, the
|
||||
# program is provided without any warranty whatsoever, whether express,
|
||||
# implied, statutory or otherwise. The term "warranty" used herein
|
||||
# includes, but is not limited to, any warranty of the quality,
|
||||
# performance, merchantability and fitness for a particular purpose of
|
||||
# the program and the nonexistence of any infringement or violation of
|
||||
# any right of any third party.
|
||||
#
|
||||
# Each user of the program will agree and understand, and be deemed to
|
||||
# have agreed and understood, that there is no warranty whatsoever for
|
||||
# the program and, accordingly, the entire risk arising from or
|
||||
# otherwise connected with the program is assumed by the user.
|
||||
#
|
||||
# Therefore, neither ICOT, the copyright holder, or any other
|
||||
# organization that participated in or was otherwise related to the
|
||||
# development of the program and their respective officials, directors,
|
||||
# officers and other employees shall be held liable for any and all
|
||||
# damages, including, without limitation, general, special, incidental
|
||||
# and consequential damages, arising out of or otherwise in connection
|
||||
# with the use or inability to use the program or any product, material
|
||||
# or result produced or otherwise obtained by using the program,
|
||||
# regardless of whether they have been advised of, or otherwise had
|
||||
# knowledge of, the possibility of such damages at any time during the
|
||||
# project or thereafter. Each user will be deemed to have agreed to the
|
||||
# foregoing by his or her commencement of use of the program. The term
|
||||
# "use" as used herein includes, but is not limited to, the use,
|
||||
# modification, copying and distribution of the program and the
|
||||
# production of secondary products from the program.
|
||||
#
|
||||
# In the case where the program, whether in its original form or
|
||||
# modified, was distributed or delivered to or received by a user from
|
||||
# any person, organization or entity other than ICOT, unless it makes or
|
||||
# grants independently of ICOT any specific warranty to the user in
|
||||
# writing, such person, organization or entity, will also be exempted
|
||||
# from and not be held liable to the user for any such damages as noted
|
||||
# above as far as the program is concerned.
|
||||
#
|
||||
# ---------------COPYING.ipadic-----END------------------------------------
|
||||
</pre>
|
||||
|
||||
<h3>3. Time Zone Database</h3>
|
||||
<p>ICU uses the public domain data and code derived from <a href="http://www.iana.org/time-zones">
|
||||
Time Zone Database</a> for its time zone support. The ownership of the TZ database is explained
|
||||
in <a href="http://tools.ietf.org/html/rfc6557">BCP 175: Procedure for Maintaining the Time Zone
|
||||
Database</a> section 7.<p>
|
||||
|
||||
<pre>
|
||||
7. Database Ownership
|
||||
|
||||
The TZ database itself is not an IETF Contribution or an IETF
|
||||
document. Rather it is a pre-existing and regularly updated work
|
||||
that is in the public domain, and is intended to remain in the public
|
||||
domain. Therefore, BCPs 78 [RFC5378] and 79 [RFC3979] do not apply
|
||||
to the TZ Database or contributions that individuals make to it.
|
||||
Should any claims be made and substantiated against the TZ Database,
|
||||
the organization that is providing the IANA Considerations defined in
|
||||
this RFC, under the memorandum of understanding with the IETF,
|
||||
currently ICANN, may act in accordance with all competent court
|
||||
orders. No ownership claims will be made by ICANN or the IETF Trust
|
||||
on the database or the code. Any person making a contribution to the
|
||||
database or code waives all rights to future claims in that
|
||||
contribution or in the TZ Database.
|
||||
|
||||
</pre>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -1,159 +0,0 @@
|
|||
Copyright (C) 2000-2003, International Business Machines
|
||||
Corporation and others. All Rights Reserved.
|
||||
ICU is packaged into a number of small, interdependent packages. This
|
||||
file describes what these packages are, what their name should be
|
||||
like, and what their contents are. It is useful as a reference and a
|
||||
guide when packaging ICU on a new system.
|
||||
|
||||
+ List of ICU packages.
|
||||
|
||||
ICU is distributed as the following packages:
|
||||
|
||||
- ICU libraries. This package contains the runtime libraries needed by
|
||||
applications that use ICU. All the other packages require this package
|
||||
to be installed.
|
||||
- ICU. This package contains the converters data, the timezones data,
|
||||
and all the ICU tools.
|
||||
- ICU locales. This package adds locales and break data.
|
||||
- ICU development. This package contains the files necessary to build
|
||||
applications that use ICU, i.e. header files, links to shared
|
||||
libraries used by the linker, static libraries, etc... It also
|
||||
contains sample applications and documentation.
|
||||
- ICU docs. This package contains further documentation for ICU,
|
||||
including a complete API reference.
|
||||
- ICU data. This package contains the source for the compiled data
|
||||
contained by the ICU package.
|
||||
- ICU international data. This package contains the source for the
|
||||
compiled data contained by the ICU locales package.
|
||||
|
||||
In this file, we will refer to Autoconf variables as in $(bindir). In
|
||||
addition to these, we will use the following variables to denote
|
||||
ICU-specific directories or information:
|
||||
|
||||
VERSION ICU's dotted version number, e.g. 1.6.0.1 as of this
|
||||
writing.
|
||||
|
||||
ICUDATADIR The directory where portable ICU data are. This is
|
||||
defined as $(datadir)/icu/$(VERSION).
|
||||
ICULIBDIR The directory where platform-specific ICU data
|
||||
are. This is defined as $(libdir)/icu/$(VERSION).
|
||||
ICUSYSCONFDIR The directory where ICU configuration files are. This
|
||||
is defined as $(sysconfdir)/icu.
|
||||
|
||||
When referring to libraries, .so will be used to denote the extension
|
||||
of a shared library, and .a to denote the extension of a static
|
||||
library. These extensions will actually be different on some platforms.
|
||||
|
||||
+ Configuration and compilation of ICU
|
||||
|
||||
ICU should be configured with the following options:
|
||||
|
||||
--with-data-packaging=files
|
||||
--disable-rpath
|
||||
--enable-shared
|
||||
--enable-static
|
||||
--without-samples
|
||||
|
||||
in addition to platform-specific settings (like a specific mandir or
|
||||
sysconfdir). Note that the use of --disable-rpath assumes that the
|
||||
packaging is made for a standard location, or that the package
|
||||
installation/deinstallation will correctly manage the configuration
|
||||
of the system's dyanmic loader. This is the right way of doing things.
|
||||
|
||||
The configure script invokation should also be done with
|
||||
|
||||
CFLAGS="-O2"
|
||||
|
||||
set, as in:
|
||||
|
||||
$ CFLAGS="-O2" ./configure ...
|
||||
|
||||
The files packaging mode is chosen because it offers the maximum
|
||||
flexibility. Packages can be split easily, and system administrators
|
||||
can add converters, aliases, and other resources with little
|
||||
effort. Ideally, the ICU build will be modified to allow for distributing a
|
||||
libicudata.so with all the converters and locales, but indexes and aliases
|
||||
as separate files. But for now, this is the easiest way to get started.
|
||||
|
||||
+ The ICU libraries package
|
||||
|
||||
The ICU libraries package is typically named `libicuXX' where XX is
|
||||
the major number of ICU's libraries. This number is ICU's version
|
||||
number multiplied by 10 and rounded down to the nearest integer (it is
|
||||
also the value of the LIB_VERSION_MAJOR configure substitution
|
||||
variable). For example, for ICU 1.6.0.1, it is 16, so the package name
|
||||
is `libicu16'. The major version is part of the package name to allow
|
||||
for the simultaneous installation of different ICU releases.
|
||||
|
||||
This package contains:
|
||||
|
||||
- All the shared libraries, and their major number symbolic link, but
|
||||
not the .so symbolic link that is only used at link time (this one is
|
||||
part of the development package). These are $(libdir)/libicu*.so.* and
|
||||
$(libdir)/libustdio.so.* at the time of this writing.
|
||||
|
||||
+ The ICU package
|
||||
|
||||
The ICU package is simply named `icu'. It provides data used by the ICU
|
||||
libraries package and commands to create and manipulate that data.
|
||||
|
||||
This package contains:
|
||||
|
||||
- The Unicode data files (uprops.dat and unames.dat as of this writing).
|
||||
- The time zones data files (tz.dat).
|
||||
- All the binary data files for converters (.cnv files).
|
||||
- All the ICU commands.
|
||||
- The manual pages for ICU commands and file formats.
|
||||
|
||||
+ The ICU locales package
|
||||
|
||||
The ICU locales package is named `icu-locales'. It provides data used by
|
||||
internationalization support in ICU.
|
||||
|
||||
This package contains:
|
||||
|
||||
- All the data for locales in ICU (.dat files).
|
||||
- All the break data for specific locales (.brk files).
|
||||
|
||||
+ The ICU development package
|
||||
|
||||
The ICU developpment package is named `libicu-dev'. It provides all
|
||||
the files necessary to write applications that use ICU, along with
|
||||
examples and some documentation.
|
||||
|
||||
This package contains:
|
||||
|
||||
- The /usr/include/unicode directory which contains all the ICU
|
||||
headers.
|
||||
- The .so symbolic links used by the linker to link against the
|
||||
latest version of the libraries.
|
||||
- A sample Makefile fragment that can be included by applications
|
||||
using ICU, to faciliate their building, along with a platform-specific
|
||||
configuration file included by this fragment.
|
||||
- The sample applications from the ICU source tree, in an appropriate
|
||||
location for the system that the package is installed on (for example,
|
||||
on Debian, in /usr/share/doc/libicu-dev/examples).
|
||||
|
||||
This package depends on the ICU libraries package with the exact same
|
||||
version, since it provides .so symbolic links to the latest libraries.
|
||||
|
||||
+ The ICU docs package
|
||||
|
||||
The ICU docs package is named `libicu-doc'. It contains the files
|
||||
generated by doxygen when the `make doc' command is executed, in a
|
||||
location appropriate for the system that the package is installed on.
|
||||
|
||||
+ The ICU data package
|
||||
|
||||
The ICU data package is named `icu-data'. It contains source files for
|
||||
the data found in the ICU package. These files are installed in
|
||||
$(ICUDATADIR).
|
||||
|
||||
+ The ICU international data package
|
||||
|
||||
The ICU data package is named `icu-i18ndata'. It contains source files for
|
||||
the dat founf in the ICU locales package. These files are installed in
|
||||
$(ICUDATADIR).
|
||||
|
||||
----
|
||||
Yves Arrouye <yves@realnames.com>
|
|
@ -1,13 +0,0 @@
|
|||
Copyright (C) 2000-2003, International Business Machines
|
||||
Corporation and others. All Rights Reserved.
|
||||
|
||||
This directory contains information, input files and scripts for
|
||||
packaging ICU using specific packaging tools. We assume that the
|
||||
packager is familiar with the tools and procedures needed to build a
|
||||
package for a given packaging method (for example, how to use
|
||||
dpkg-buildpackage(1) on Debian GNU/Linux, or rpm(8) on distributions that
|
||||
use RPM packages).
|
||||
|
||||
Please read the file PACKAGES if you are interested in packaging ICU
|
||||
yourself. It describes what the different packages should be, and what
|
||||
their contents are.
|
|
@ -1,228 +0,0 @@
|
|||
# Copyright (C) 2000-2005, International Business Machines
|
||||
# Corporation and others. All Rights Reserved.
|
||||
#
|
||||
# RPM specification file for ICU.
|
||||
#
|
||||
# Neal Probert <nprobert@walid.com> is the current maintainer.
|
||||
# Yves Arrouye <yves@realnames.com> is the original author.
|
||||
|
||||
# This file can be freely redistributed under the same license as ICU.
|
||||
|
||||
Name: icu
|
||||
Version: 3.4
|
||||
Release: 1
|
||||
Requires: libicu34 >= %{version}
|
||||
Summary: International Components for Unicode
|
||||
Packager: Ian Holsman (CNET Networks) <ianh@cnet.com>
|
||||
Copyright: X License
|
||||
Group: System Environment/Libraries
|
||||
Source: icu-%{version}.tgz
|
||||
BuildRoot: /var/tmp/%{name}-%{version}
|
||||
%description
|
||||
ICU is a set of C and C++ libraries that provides robust and full-featured
|
||||
Unicode and locale support. The library provides calendar support, conversions
|
||||
for many character sets, language sensitive collation, date
|
||||
and time formatting, support for many locales, message catalogs
|
||||
and resources, message formatting, normalization, number and currency
|
||||
formatting, time zones support, transliteration, word, line and
|
||||
sentence breaking, etc.
|
||||
|
||||
This package contains the Unicode character database and derived
|
||||
properties, along with converters and time zones data.
|
||||
|
||||
This package contains the runtime libraries for ICU. It does
|
||||
not contain any of the data files needed at runtime and present in the
|
||||
`icu' and `icu-locales` packages.
|
||||
|
||||
%package -n libicu34
|
||||
Summary: International Components for Unicode (libraries)
|
||||
Group: Development/Libraries
|
||||
%description -n libicu34
|
||||
ICU is a set of C and C++ libraries that provides robust and full-featured
|
||||
Unicode support. This package contains the runtime libraries for ICU. It does
|
||||
not contain any of the data files needed at runtime and present in the
|
||||
`icu' and `icu-locales` packages.
|
||||
|
||||
%package -n libicu-devel
|
||||
Summary: International Components for Unicode (development files)
|
||||
Group: Development/Libraries
|
||||
Requires: libicu34 = %{version}
|
||||
%description -n libicu-devel
|
||||
ICU is a set of C and C++ libraries that provides robust and full-featured
|
||||
Unicode support. This package contains the development files for ICU.
|
||||
|
||||
%package locales
|
||||
Summary: Locale data for ICU
|
||||
Group: System Environment/Libraries
|
||||
Requires: libicu34 >= %{version}
|
||||
%description locales
|
||||
The locale data are used by ICU to provide localization (l10n),
|
||||
internationalization (i18n) and timezone support to ICU applications.
|
||||
This package also contains break data for various languages,
|
||||
and transliteration data.
|
||||
|
||||
%post
|
||||
# Adjust the current ICU link in /usr/lib/icu
|
||||
|
||||
icucurrent=`2>/dev/null ls -dp /usr/lib/icu/* | sed -n 's,.*/\([^/]*\)/$,\1,p'| sort -rn | head -1`
|
||||
cd /usr/lib/icu
|
||||
rm -f /usr/lib/icu/current
|
||||
if test x"$icucurrent" != x
|
||||
then
|
||||
ln -s "$icucurrent" current
|
||||
fi
|
||||
|
||||
#ICU_DATA=/usr/share/icu/%{version}
|
||||
#export ICU_DATA
|
||||
|
||||
%preun
|
||||
# Adjust the current ICU link in /usr/lib/icu
|
||||
|
||||
icucurrent=`2>/dev/null ls -dp /usr/lib/icu/* | sed -n -e '/\/%{version}\//d' -e 's,.*/\([^/]*\)/$,\1,p'| sort -rn | head -1`
|
||||
cd /usr/lib/icu
|
||||
rm -f /usr/lib/icu/current
|
||||
if test x"$icucurrent" != x
|
||||
then
|
||||
ln -s "$icucurrent" current
|
||||
fi
|
||||
|
||||
%post -n libicu34
|
||||
ldconfig
|
||||
|
||||
# Adjust the current ICU link in /usr/lib/icu
|
||||
|
||||
icucurrent=`2>/dev/null ls -dp /usr/lib/icu/* | sed -n 's,.*/\([^/]*\)/$,\1,p'| sort -rn | head -1`
|
||||
cd /usr/lib/icu
|
||||
rm -f /usr/lib/icu/current
|
||||
if test x"$icucurrent" != x
|
||||
then
|
||||
ln -s "$icucurrent" current
|
||||
fi
|
||||
|
||||
%preun -n libicu34
|
||||
# Adjust the current ICU link in /usr/lib/icu
|
||||
|
||||
icucurrent=`2>/dev/null ls -dp /usr/lib/icu/* | sed -n -e '/\/%{version}\//d' -e 's,.*/\([^/]*\)/$,\1,p'| sort -rn | head -1`
|
||||
cd /usr/lib/icu
|
||||
rm -f /usr/lib/icu/current
|
||||
if test x"$icucurrent" != x
|
||||
then
|
||||
ln -s "$icucurrent" current
|
||||
fi
|
||||
|
||||
%prep
|
||||
%setup -q -n icu
|
||||
|
||||
%build
|
||||
cd source
|
||||
chmod a+x ./configure
|
||||
CFLAGS="-O3" CXXFLAGS="-O" ./configure --prefix=/usr --sysconfdir=/etc --with-data-packaging=files --enable-shared --enable-static --disable-samples
|
||||
echo 'CPPFLAGS += -DICU_DATA_DIR=\"/usr/share/icu/%{version}\"' >> icudefs.mk
|
||||
make RPM_OPT_FLAGS="$RPM_OPT_FLAGS"
|
||||
|
||||
%install
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
cd source
|
||||
make install DESTDIR=$RPM_BUILD_ROOT
|
||||
|
||||
%files
|
||||
%defattr(-,root,root)
|
||||
%doc readme.html
|
||||
%doc license.html
|
||||
/usr/share/icu/%{version}/license.html
|
||||
/usr/share/icu/%{version}/icudt34l/*.cnv
|
||||
/usr/share/icu/%{version}/icudt34l/*.icu
|
||||
/usr/share/icu/%{version}/icudt34l/*.spp
|
||||
|
||||
/usr/bin/derb
|
||||
/usr/bin/genbrk
|
||||
/usr/bin/gencnval
|
||||
/usr/bin/genrb
|
||||
/usr/bin/icu-config
|
||||
/usr/bin/makeconv
|
||||
/usr/bin/pkgdata
|
||||
/usr/bin/uconv
|
||||
|
||||
/usr/sbin/decmn
|
||||
/usr/sbin/genccode
|
||||
/usr/sbin/gencmn
|
||||
/usr/sbin/gensprep
|
||||
/usr/sbin/genuca
|
||||
/usr/sbin/icuswap
|
||||
/usr/share/icu/%{version}/mkinstalldirs
|
||||
|
||||
/usr/man/man1/derb.1.*
|
||||
/usr/man/man1/gencnval.1.*
|
||||
/usr/man/man1/genrb.1.*
|
||||
/usr/man/man1/icu-config.1.*
|
||||
/usr/man/man1/makeconv.1.*
|
||||
/usr/man/man1/pkgdata.1.*
|
||||
/usr/man/man1/uconv.1.*
|
||||
/usr/man/man8/decmn.8.*
|
||||
/usr/man/man8/genccode.8.*
|
||||
/usr/man/man8/gencmn.8.*
|
||||
/usr/man/man8/gensprep.8.*
|
||||
/usr/man/man8/genuca.8.*
|
||||
|
||||
%files -n icu-locales
|
||||
/usr/share/icu/%{version}/icudt34l/*.brk
|
||||
/usr/share/icu/%{version}/icudt34l/*.res
|
||||
/usr/share/icu/%{version}/icudt34l/coll/*.res
|
||||
/usr/share/icu/%{version}/icudt34l/rbnf/*.res
|
||||
/usr/share/icu/%{version}/icudt34l/translit/*.res
|
||||
|
||||
%files -n libicu34
|
||||
%doc license.html
|
||||
/usr/lib/libicui18n.so.34
|
||||
/usr/lib/libicui18n.so.34.0
|
||||
/usr/lib/libicutu.so.34
|
||||
/usr/lib/libicutu.so.34.0
|
||||
/usr/lib/libicuuc.so.34
|
||||
/usr/lib/libicuuc.so.34.0
|
||||
/usr/lib/libicudata.so.34
|
||||
/usr/lib/libicudata.so.34.0
|
||||
/usr/lib/libicuio.so.34
|
||||
/usr/lib/libicuio.so.34.0
|
||||
/usr/lib/libiculx.so.34
|
||||
/usr/lib/libiculx.so.34.0
|
||||
/usr/lib/libicule.so.34
|
||||
/usr/lib/libicule.so.34.0
|
||||
|
||||
%files -n libicu-devel
|
||||
%doc readme.html
|
||||
%doc license.html
|
||||
/usr/lib/libicui18n.so
|
||||
/usr/lib/libsicui18n.a
|
||||
/usr/lib/libicuuc.so
|
||||
/usr/lib/libsicuuc.a
|
||||
/usr/lib/libicutu.so
|
||||
/usr/lib/libsicutu.a
|
||||
/usr/lib/libicuio.so
|
||||
/usr/lib/libsicuio.a
|
||||
/usr/lib/libicudata.so
|
||||
/usr/lib/libsicudata.a
|
||||
/usr/lib/libicule.so
|
||||
/usr/lib/libsicule.a
|
||||
/usr/lib/libiculx.so
|
||||
/usr/lib/libsiculx.a
|
||||
/usr/include/unicode/*.h
|
||||
/usr/include/layout/*.h
|
||||
/usr/lib/icu/%{version}/Makefile.inc
|
||||
/usr/lib/icu/Makefile.inc
|
||||
/usr/share/icu/%{version}/config
|
||||
/usr/share/doc/icu-%{version}/*
|
||||
|
||||
%changelog
|
||||
* Mon Jun 07 2004 Alexei Dets <adets@idsk.com>
|
||||
- update to 3.0
|
||||
* Tue Aug 16 2003 Steven Loomis <srl@jtcsv.com>
|
||||
- update to 2.6.1 - include license
|
||||
* Thu Jun 05 2003 Steven Loomis <srl@jtcsv.com>
|
||||
- Update to 2.6
|
||||
* Fri Dec 27 2002 Steven Loomis <srl@jtcsv.com>
|
||||
- Update to 2.4 spec
|
||||
* Fri Sep 27 2002 Steven Loomis <srl@jtcsv.com>
|
||||
- minor updates to 2.2 spec. Rpath is off by default, don't pass it as an option.
|
||||
* Mon Sep 16 2002 Ian Holsman <ian@holsman.net>
|
||||
- update to icu 2.2
|
||||
|
1773
intl/icu/readme.html
1773
intl/icu/readme.html
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -1,6 +1,6 @@
|
|||
#******************************************************************************
|
||||
#
|
||||
# Copyright (C) 1998-2012, International Business Machines
|
||||
# Copyright (C) 1998-2013, International Business Machines
|
||||
# Corporation and others. All Rights Reserved.
|
||||
#
|
||||
#******************************************************************************
|
||||
|
@ -34,6 +34,7 @@ subdir = .
|
|||
@EXTRAS_TRUE@EXTRA = extra
|
||||
@TESTS_TRUE@TEST = test
|
||||
@SAMPLES_TRUE@SAMPLE = samples
|
||||
@TOOLS_TRUE@TOOLS = tools
|
||||
|
||||
## pkgconfig setup. Always have uc and i18n. Others are optional.
|
||||
ALL_PKGCONFIG_SUFFIX=uc i18n
|
||||
|
@ -52,10 +53,10 @@ ALL_PKGCONFIG_FILES=$(ALL_PKGCONFIG_SUFFIX:%=$(top_builddir)/config/icu-%.pc)
|
|||
INSTALLED_BUILT_FILES = $(top_builddir)/config/Makefile.inc $(top_builddir)/config/pkgdata.inc $(top_builddir)/config/icu-config @platform_make_fragment@ $(EXTRA_DATA:%=$(DESTDIR)$(pkglibdir)/%) $(ALL_PKGCONFIG_FILES)
|
||||
|
||||
## Files built (autoconfed) but not installed
|
||||
LOCAL_BUILT_FILES = icudefs.mk config/icucross.mk
|
||||
LOCAL_BUILT_FILES = icudefs.mk config/icucross.mk config/icucross.inc
|
||||
|
||||
DOCDIRS = common i18n
|
||||
SUBDIRS = stubdata common i18n $(LAYOUT) tools data $(ICUIO) $(EXTRA) $(SAMPLE) $(TEST)
|
||||
SUBDIRS = stubdata common i18n $(LAYOUT) $(ICUIO) $(TOOLS) data $(EXTRA) $(SAMPLE) $(TEST)
|
||||
|
||||
SECTION = 1
|
||||
|
||||
|
@ -89,6 +90,9 @@ xcheck: all xcheck-recursive
|
|||
xperf: all xperf-recursive
|
||||
check-exhaustive: all check-exhaustive-recursive
|
||||
|
||||
pcheck: all tests
|
||||
@$(MAKE) -C test pcheck
|
||||
|
||||
check-exhaustive-local: check-local
|
||||
|
||||
xcheck-recursive: all xcheck-local
|
||||
|
@ -127,7 +131,7 @@ $(DOCZIP): doc
|
|||
endif
|
||||
|
||||
LOCAL_SUBDIRS = $(SUBDIRS)
|
||||
CLEAN_FIRST_SUBDIRS = tools
|
||||
CLEAN_FIRST_SUBDIRS = $(TOOLS)
|
||||
|
||||
$(LIBDIR) $(BINDIR):
|
||||
-$(MKINSTALLDIRS) $@
|
||||
|
@ -206,7 +210,7 @@ clean-local:
|
|||
|
||||
distclean-local: clean-local
|
||||
$(RMV) $(top_builddir)/config/Makefile.inc $(top_builddir)/config/pkgdata.inc $(top_builddir)/config/icu-config $(top_builddir)/config/icu.pc $(ALL_PKGCONFIG_FILES)
|
||||
$(RMV) config.cache config.log config.status $(top_builddir)/config/icucross.mk autom4te.cache uconfig.h.prepend
|
||||
$(RMV) config.cache config.log config.status $(top_builddir)/config/icucross.mk $(top_builddir)/config/icucross.inc autom4te.cache uconfig.h.prepend
|
||||
$(RMV) Makefile config/Makefile icudefs.mk $(LIBDIR) $(BINDIR)
|
||||
-$(RMV) dist
|
||||
|
||||
|
@ -220,8 +224,8 @@ xcheck-local: $(top_builddir)/config/icu-config $(top_builddir)/config/Makefile.
|
|||
@test "passed" = "$(shell $(MAKE) --no-print-directory -f $(top_builddir)/config/Makefile.inc SELFCHECK=1 selfcheck)" || (echo "FAIL: Makefile.inc could not run properly." ; exit 1 )
|
||||
@echo "PASS: config selfcheck OK"
|
||||
|
||||
#$(srcdir)/configure : $(srcdir)/configure.in $(top_srcdir)/aclocal.m4
|
||||
# cd $(srcdir) && $(AUTOCONF)
|
||||
#$(srcdir)/configure : $(srcdir)/configure.ac $(top_srcdir)/aclocal.m4
|
||||
# cd $(srcdir) && aclocal && $(AUTOCONF)
|
||||
|
||||
icudefs.mk: $(srcdir)/icudefs.mk.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) \
|
||||
|
@ -238,6 +242,11 @@ config/icucross.mk: $(top_builddir)/icudefs.mk $(top_builddir)/Makefile
|
|||
echo "PKGDATA_INVOKE=$(LDLIBRARYPATH_ENVVAR)=$(LIBRARY_PATH_PREFIX)"'$$(cross_buildroot)/stubdata:$$(cross_buildroot)/tools/ctestfw:$$(TOOLLIBDIR):$$$$'"$(LDLIBRARYPATH_ENVVAR) " ;\
|
||||
echo ) >> $@
|
||||
|
||||
config/icucross.inc: $(top_builddir)/icudefs.mk $(top_builddir)/Makefile @platform_make_fragment@
|
||||
@echo rebuilding $@
|
||||
@(grep '^CURR_FULL_DIR' $(top_builddir)/icudefs.mk ; \
|
||||
grep '^CURR_FULL_DIR' @platform_make_fragment@ || echo ""; \
|
||||
) > $@
|
||||
|
||||
config/icu.pc: $(srcdir)/config/icu.pc.in
|
||||
cd $(top_builddir) \
|
||||
|
|
|
@ -0,0 +1,502 @@
|
|||
# Copyright (c) 1999-2013, International Business Machines Corporation and
|
||||
# others. All Rights Reserved.
|
||||
# acinclude.m4 for ICU
|
||||
# Don't edit aclocal.m4, do edit acinclude.m4
|
||||
# Stephen F. Booth
|
||||
|
||||
# @TOP@
|
||||
|
||||
# ICU_CHECK_MH_FRAG
|
||||
AC_DEFUN([ICU_CHECK_MH_FRAG], [
|
||||
AC_CACHE_CHECK(
|
||||
[which Makefile fragment to use for ${host}],
|
||||
[icu_cv_host_frag],
|
||||
[
|
||||
case "${host}" in
|
||||
*-*-solaris*)
|
||||
if test "$GCC" = yes; then
|
||||
icu_cv_host_frag=mh-solaris-gcc
|
||||
else
|
||||
icu_cv_host_frag=mh-solaris
|
||||
fi ;;
|
||||
alpha*-*-linux-gnu)
|
||||
if test "$GCC" = yes; then
|
||||
icu_cv_host_frag=mh-alpha-linux-gcc
|
||||
else
|
||||
icu_cv_host_frag=mh-alpha-linux-cc
|
||||
fi ;;
|
||||
powerpc*-*-linux*)
|
||||
if test "$GCC" = yes; then
|
||||
icu_cv_host_frag=mh-linux
|
||||
else
|
||||
icu_cv_host_frag=mh-linux-va
|
||||
fi ;;
|
||||
*-*-linux*|*-*-gnu|*-*-k*bsd*-gnu|*-*-kopensolaris*-gnu) icu_cv_host_frag=mh-linux ;;
|
||||
*-*-cygwin|*-*-mingw32|*-*-mingw64)
|
||||
if test "$GCC" = yes; then
|
||||
AC_TRY_COMPILE([
|
||||
#ifndef __MINGW32__
|
||||
#error This is not MinGW
|
||||
#endif], [], AC_TRY_COMPILE([
|
||||
#ifndef __MINGW64__
|
||||
#error This is not MinGW64
|
||||
#endif], [], icu_cv_host_frag=mh-mingw64, icu_cv_host_frag=mh-mingw), icu_cv_host_frag=mh-cygwin)
|
||||
else
|
||||
case "${host}" in
|
||||
*-*-cygwin) icu_cv_host_frag=mh-cygwin-msvc ;;
|
||||
*-*-mingw32|*-*-mingw64) icu_cv_host_frag=mh-msys-msvc ;;
|
||||
esac
|
||||
fi ;;
|
||||
*-*-*bsd*|*-*-dragonfly*) icu_cv_host_frag=mh-bsd-gcc ;;
|
||||
*-*-aix*)
|
||||
if test "$GCC" = yes; then
|
||||
icu_cv_host_frag=mh-aix-gcc
|
||||
else
|
||||
icu_cv_host_frag=mh-aix-va
|
||||
fi ;;
|
||||
*-*-hpux*)
|
||||
if test "$GCC" = yes; then
|
||||
icu_cv_host_frag=mh-hpux-gcc
|
||||
else
|
||||
case "$CXX" in
|
||||
*aCC) icu_cv_host_frag=mh-hpux-acc ;;
|
||||
esac
|
||||
fi ;;
|
||||
*-*ibm-openedition*|*-*-os390*) icu_cv_host_frag=mh-os390 ;;
|
||||
*-*-os400*) icu_cv_host_frag=mh-os400 ;;
|
||||
*-apple-rhapsody*) icu_cv_host_frag=mh-darwin ;;
|
||||
*-apple-darwin*) icu_cv_host_frag=mh-darwin ;;
|
||||
*-*-beos) icu_cv_host_frag=mh-beos ;;
|
||||
*-*-haiku) icu_cv_host_frag=mh-haiku ;;
|
||||
*-*-irix*) icu_cv_host_frag=mh-irix ;;
|
||||
*-dec-osf*) icu_cv_host_frag=mh-alpha-osf ;;
|
||||
*-*-nto*) icu_cv_host_frag=mh-qnx ;;
|
||||
*-ncr-*) icu_cv_host_frag=mh-mpras ;;
|
||||
*) icu_cv_host_frag=mh-unknown ;;
|
||||
esac
|
||||
]
|
||||
)
|
||||
])
|
||||
|
||||
# ICU_CONDITIONAL - similar example taken from Automake 1.4
|
||||
AC_DEFUN([ICU_CONDITIONAL],
|
||||
[AC_SUBST($1_TRUE)
|
||||
if $2; then
|
||||
$1_TRUE=
|
||||
else
|
||||
$1_TRUE='#'
|
||||
fi])
|
||||
|
||||
# ICU_PROG_LINK - Make sure that the linker is usable
|
||||
AC_DEFUN([ICU_PROG_LINK],
|
||||
[
|
||||
case "${host}" in
|
||||
*-*-cygwin*|*-*-mingw*)
|
||||
if test "$GCC" != yes && test -n "`link --version 2>&1 | grep 'GNU coreutils'`"; then
|
||||
AC_MSG_ERROR([link.exe is not a valid linker. Your PATH is incorrect.
|
||||
Please follow the directions in ICU's readme.])
|
||||
fi;;
|
||||
*);;
|
||||
esac])
|
||||
|
||||
# AC_SEARCH_LIBS_FIRST(FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
|
||||
# [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
|
||||
# Search for a library defining FUNC, then see if it's not already available.
|
||||
|
||||
AC_DEFUN([AC_SEARCH_LIBS_FIRST],
|
||||
[AC_PREREQ([2.13])
|
||||
AC_CACHE_CHECK([for library containing $1], [ac_cv_search_$1],
|
||||
[ac_func_search_save_LIBS="$LIBS"
|
||||
ac_cv_search_$1="no"
|
||||
for i in $2; do
|
||||
LIBS="-l$i $5 $ac_func_search_save_LIBS"
|
||||
AC_TRY_LINK_FUNC([$1],
|
||||
[ac_cv_search_$1="-l$i"
|
||||
break])
|
||||
done
|
||||
if test "$ac_cv_search_$1" = "no"; then
|
||||
AC_TRY_LINK_FUNC([$1], [ac_cv_search_$1="none required"])
|
||||
fi
|
||||
LIBS="$ac_func_search_save_LIBS"])
|
||||
if test "$ac_cv_search_$1" != "no"; then
|
||||
test "$ac_cv_search_$1" = "none required" || LIBS="$ac_cv_search_$1 $LIBS"
|
||||
$3
|
||||
else :
|
||||
$4
|
||||
fi])
|
||||
|
||||
|
||||
|
||||
# Check if we can build and use 64-bit libraries
|
||||
AC_DEFUN([AC_CHECK_64BIT_LIBS],
|
||||
[
|
||||
BITS_REQ=nochange
|
||||
ENABLE_64BIT_LIBS=unknown
|
||||
## revisit this for cross-compile.
|
||||
|
||||
AC_ARG_ENABLE(64bit-libs,
|
||||
[ --enable-64bit-libs (deprecated, use --with-library-bits) build 64-bit libraries [default= platform default]],
|
||||
[echo "note, use --with-library-bits instead of --*-64bit-libs"
|
||||
case "${enableval}" in
|
||||
no|false|32) with_library_bits=32; ;;
|
||||
yes|true|64) with_library_bits=64else32 ;;
|
||||
nochange) with_library_bits=nochange; ;;
|
||||
*) AC_MSG_ERROR(bad value ${enableval} for '--*-64bit-libs') ;;
|
||||
esac] )
|
||||
|
||||
|
||||
AC_ARG_WITH(library-bits,
|
||||
[ --with-library-bits=bits specify how many bits to use for the library (32, 64, 64else32, nochange) [default=nochange]],
|
||||
[case "${withval}" in
|
||||
""|nochange) BITS_REQ=$withval ;;
|
||||
32|64|64else32) BITS_REQ=$withval ;;
|
||||
*) AC_MSG_ERROR(bad value ${withval} for --with-library-bits) ;;
|
||||
esac])
|
||||
|
||||
# don't use these for cross compiling
|
||||
if test "$cross_compiling" = "yes" -a "${BITS_REQ}" != "nochange"; then
|
||||
AC_MSG_ERROR([Don't specify bitness when cross compiling. See readme.html for help with cross compilation., and set compiler options manually.])
|
||||
fi
|
||||
AC_CHECK_SIZEOF([void *])
|
||||
AC_MSG_CHECKING([whether runnable 64 bit binaries are built by default])
|
||||
case $ac_cv_sizeof_void_p in
|
||||
8) DEFAULT_64BIT=yes ;;
|
||||
4) DEFAULT_64BIT=no ;;
|
||||
*) DEFAULT_64BIT=unknown
|
||||
esac
|
||||
BITS_GOT=unknown
|
||||
|
||||
# 'OK' here means, we can exit any further checking, everything's copa
|
||||
BITS_OK=yes
|
||||
|
||||
# do we need to check for buildable/runnable 32 or 64 bit?
|
||||
BITS_CHECK_32=no
|
||||
BITS_CHECK_64=no
|
||||
|
||||
# later, can we run the 32/64 bit binaries so made?
|
||||
BITS_RUN_32=no
|
||||
BITS_RUN_64=no
|
||||
|
||||
if test "$DEFAULT_64BIT" = "yes"; then
|
||||
# we get 64 bits by default.
|
||||
BITS_GOT=64
|
||||
case "$BITS_REQ" in
|
||||
32)
|
||||
# need to look for 32 bit support.
|
||||
BITS_CHECK_32=yes
|
||||
# not copa.
|
||||
BITS_OK=no;;
|
||||
# everyone else is happy.
|
||||
nochange) ;;
|
||||
*) ;;
|
||||
esac
|
||||
elif test "$DEFAULT_64BIT" = "no"; then
|
||||
# not 64 bit by default.
|
||||
BITS_GOT=32
|
||||
case "$BITS_REQ" in
|
||||
64|64else32)
|
||||
BITS_CHECK_64=yes
|
||||
#BITS_CHECK_32=yes
|
||||
BITS_OK=no;;
|
||||
nochange) ;;
|
||||
*) ;;
|
||||
esac
|
||||
elif test "$DEFAULT_64BIT" = "unknown"; then
|
||||
# cross compiling.
|
||||
BITS_GOT=unknown
|
||||
case "$BITS_REQ" in
|
||||
64|64else32) BITS_OK=no
|
||||
BITS_CHECK_32=yes
|
||||
BITS_CHECK_64=yes ;;
|
||||
32) BITS_OK=no;;
|
||||
nochange) ;;
|
||||
*) ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
AC_MSG_RESULT($DEFAULT_64BIT);
|
||||
|
||||
if test "$BITS_OK" != "yes"; then
|
||||
# not copa. back these up.
|
||||
CFLAGS_OLD="${CFLAGS}"
|
||||
CXXFLAGS_OLD="${CXXFLAGS}"
|
||||
LDFLAGS_OLD="${LDFLAGS}"
|
||||
ARFLAGS_OLD="${ARFLAGS}"
|
||||
|
||||
CFLAGS_32="${CFLAGS}"
|
||||
CXXFLAGS_32="${CXXFLAGS}"
|
||||
LDFLAGS_32="${LDFLAGS}"
|
||||
ARFLAGS_32="${ARFLAGS}"
|
||||
|
||||
CFLAGS_64="${CFLAGS}"
|
||||
CXXFLAGS_64="${CXXFLAGS}"
|
||||
LDFLAGS_64="${LDFLAGS}"
|
||||
ARFLAGS_64="${ARFLAGS}"
|
||||
|
||||
CAN_BUILD_64=unknown
|
||||
CAN_BUILD_32=unknown
|
||||
# These results can't be cached because is sets compiler flags.
|
||||
if test "$BITS_CHECK_64" = "yes"; then
|
||||
AC_MSG_CHECKING([how to build 64-bit executables])
|
||||
CAN_BUILD_64=no
|
||||
####
|
||||
# Find out if we think we can *build* for 64 bit. Doesn't check whether we can run it.
|
||||
# Note, we don't have to actually check if the options work- we'll try them before using them.
|
||||
# So, only try actually testing the options, if you are trying to decide between multiple options.
|
||||
# On exit from the following clauses:
|
||||
# if CAN_BUILD_64=yes:
|
||||
# *FLAGS are assumed to contain the right settings for 64bit
|
||||
# else if CAN_BUILD_64=no: (default)
|
||||
# *FLAGS are assumed to be trashed, and will be reset from *FLAGS_OLD
|
||||
|
||||
if test "$GCC" = yes; then
|
||||
CFLAGS="${CFLAGS} -m64"
|
||||
CXXFLAGS="${CXXFLAGS} -m64"
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) {return (sizeof(void*)*8==64)?0:1;}])],
|
||||
CAN_BUILD_64=yes, CAN_BUILD_64=no)
|
||||
else
|
||||
case "${host}" in
|
||||
sparc*-*-solaris*)
|
||||
# 1. try -m64
|
||||
CFLAGS="${CFLAGS} -m64"
|
||||
CXXFLAGS="${CXXFLAGS} -m64"
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([int main(void) {return (sizeof(void*)*8==64)?0:1;}])],
|
||||
CAN_BUILD_64=yes, CAN_BUILD_64=no, CAN_BUILD_64=unknown)
|
||||
if test "$CAN_BUILD_64" != yes; then
|
||||
# Nope. back out changes.
|
||||
CFLAGS="${CFLAGS_OLD}"
|
||||
CXXFLAGS="${CFLAGS_OLD}"
|
||||
# 2. try xarch=v9 [deprecated]
|
||||
## TODO: cross compile: the following won't work.
|
||||
SPARCV9=`isainfo -n 2>&1 | grep sparcv9`
|
||||
SOL64=`$CXX -xarch=v9 2>&1 && $CC -xarch=v9 2>&1 | grep -v usage:`
|
||||
# "Warning: -xarch=v9 is deprecated, use -m64 to create 64-bit programs"
|
||||
if test -z "$SOL64" && test -n "$SPARCV9"; then
|
||||
CFLAGS="${CFLAGS} -xtarget=ultra -xarch=v9"
|
||||
CXXFLAGS="${CXXFLAGS} -xtarget=ultra -xarch=v9"
|
||||
LDFLAGS="${LDFLAGS} -xtarget=ultra -xarch=v9"
|
||||
CAN_BUILD_64=yes
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
i386-*-solaris*)
|
||||
# 1. try -m64
|
||||
CFLAGS="${CFLAGS} -m64"
|
||||
CXXFLAGS="${CXXFLAGS} -m64"
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([int main(void) {return (sizeof(void*)*8==64)?0:1;}])],
|
||||
CAN_BUILD_64=yes, CAN_BUILD_64=no, CAN_BUILD_64=unknown)
|
||||
if test "$CAN_BUILD_64" != yes; then
|
||||
# Nope. back out changes.
|
||||
CFLAGS="${CFLAGS_OLD}"
|
||||
CXXFLAGS="${CXXFLAGS_OLD}"
|
||||
# 2. try the older compiler option
|
||||
## TODO: cross compile problem
|
||||
AMD64=`isainfo -n 2>&1 | grep amd64`
|
||||
SOL64=`$CXX -xtarget=generic64 2>&1 && $CC -xtarget=generic64 2>&1 | grep -v usage:`
|
||||
if test -z "$SOL64" && test -n "$AMD64"; then
|
||||
CFLAGS="${CFLAGS} -xtarget=generic64"
|
||||
CXXFLAGS="${CXXFLAGS} -xtarget=generic64"
|
||||
CAN_BUILD_64=yes
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
ia64-*-linux*)
|
||||
# check for ecc/ecpc compiler support
|
||||
## TODO: cross compiler problem
|
||||
if test -n "`$CXX --help 2>&1 && $CC --help 2>&1 | grep -v Intel`"; then
|
||||
if test -n "`$CXX --help 2>&1 && $CC --help 2>&1 | grep -v Itanium`"; then
|
||||
CAN_BUILD_64=yes
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
*-*-cygwin)
|
||||
# vcvarsamd64.bat should have been used to enable 64-bit builds.
|
||||
# We only do this check to display the correct answer.
|
||||
## TODO: cross compiler problem
|
||||
if test -n "`$CXX -help 2>&1 | grep 'for x64'`"; then
|
||||
CAN_BUILD_64=yes
|
||||
fi
|
||||
;;
|
||||
*-*-aix*|powerpc64-*-linux*)
|
||||
CFLAGS="${CFLAGS} -q64"
|
||||
CXXFLAGS="${CXXFLAGS} -q64"
|
||||
LDFLAGS="${LDFLAGS} -q64"
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) {return (sizeof(void*)*8==64)?0:1;}])],
|
||||
CAN_BUILD_64=yes, CAN_BUILD_64=no)
|
||||
if test "$CAN_BUILD_64" = yes; then
|
||||
# worked- set other options.
|
||||
case "${host}" in
|
||||
*-*-aix*)
|
||||
# tell AIX what executable mode to use.
|
||||
ARFLAGS="${ARFLAGS} -X64"
|
||||
esac
|
||||
fi
|
||||
;;
|
||||
*-*-hpux*)
|
||||
# First we try the newer +DD64, if that doesn't work,
|
||||
# try other options.
|
||||
|
||||
CFLAGS="${CFLAGS} +DD64"
|
||||
CXXFLAGS="${CXXFLAGS} +DD64"
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) {return (sizeof(void*)*8==64)?0:1;}])],
|
||||
CAN_BUILD_64=yes, CAN_BUILD_64=no)
|
||||
if test "$CAN_BUILD_64" != yes; then
|
||||
# reset
|
||||
CFLAGS="${CFLAGS_OLD}"
|
||||
CXXFLAGS="${CXXFLAGS_OLD}"
|
||||
# append
|
||||
CFLAGS="${CFLAGS} +DA2.0W"
|
||||
CXXFLAGS="${CXXFLAGS} +DA2.0W"
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) {return (sizeof(void*)*8==64)?0:1;}])],
|
||||
CAN_BUILD_64=yes, CAN_BUILD_64=no)
|
||||
fi
|
||||
;;
|
||||
*-*ibm-openedition*|*-*-os390*)
|
||||
CFLAGS="${CFLAGS} -Wc,lp64"
|
||||
CXXFLAGS="${CXXFLAGS} -Wc,lp64"
|
||||
LDFLAGS="${LDFLAGS} -Wl,lp64"
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) {return (sizeof(void*)*8==64)?0:1;}])],
|
||||
CAN_BUILD_64=yes, CAN_BUILD_64=no)
|
||||
;;
|
||||
*)
|
||||
# unknown platform.
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
AC_MSG_RESULT($CAN_BUILD_64)
|
||||
if test "$CAN_BUILD_64" = yes; then
|
||||
AC_MSG_CHECKING([whether runnable 64-bit binaries are being built ])
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([int main(void) {return (sizeof(void*)*8==64)?0:1;}])],
|
||||
BITS_RUN_64=yes, BITS_RUN_64=no, BITS_RUN_64=unknown)
|
||||
AC_MSG_RESULT($BITS_RUN_64);
|
||||
|
||||
CFLAGS_64="${CFLAGS}"
|
||||
CXXFLAGS_64="${CXXFLAGS}"
|
||||
LDFLAGS_64="${LDFLAGS}"
|
||||
ARFLAGS_64="${ARFLAGS}"
|
||||
fi
|
||||
# put it back.
|
||||
CFLAGS="${CFLAGS_OLD}"
|
||||
CXXFLAGS="${CXXFLAGS_OLD}"
|
||||
LDFLAGS="${LDFLAGS_OLD}"
|
||||
ARFLAGS="${ARFLAGS_OLD}"
|
||||
fi
|
||||
if test "$BITS_CHECK_32" = "yes"; then
|
||||
# see comment under 'if BITS_CHECK_64', above.
|
||||
AC_MSG_CHECKING([how to build 32-bit executables])
|
||||
if test "$GCC" = yes; then
|
||||
CFLAGS="${CFLAGS} -m32"
|
||||
CXXFLAGS="${CXXFLAGS} -m32"
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) {return (sizeof(void*)*8==32)?0:1;}])],
|
||||
CAN_BUILD_32=yes, CAN_BUILD_32=no)
|
||||
fi
|
||||
AC_MSG_RESULT($CAN_BUILD_32)
|
||||
if test "$CAN_BUILD_32" = yes; then
|
||||
AC_MSG_CHECKING([whether runnable 32-bit binaries are being built ])
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([int main(void) {return (sizeof(void*)*8==32)?0:1;}])],
|
||||
BITS_RUN_32=yes, BITS_RUN_32=no, BITS_RUN_32=unknown)
|
||||
AC_MSG_RESULT($BITS_RUN_32);
|
||||
CFLAGS_32="${CFLAGS}"
|
||||
CXXFLAGS_32="${CXXFLAGS}"
|
||||
LDFLAGS_32="${LDFLAGS}"
|
||||
ARFLAGS_32="${ARFLAGS}"
|
||||
fi
|
||||
# put it back.
|
||||
CFLAGS="${CFLAGS_OLD}"
|
||||
CXXFLAGS="${CXXFLAGS_OLD}"
|
||||
LDFLAGS="${LDFLAGS_OLD}"
|
||||
ARFLAGS="${ARFLAGS_OLD}"
|
||||
fi
|
||||
|
||||
##
|
||||
# OK. Now, we've tested for 32 and 64 bitness. Let's see what we'll do.
|
||||
#
|
||||
|
||||
# First, implement 64else32
|
||||
if test "$BITS_REQ" = "64else32"; then
|
||||
if test "$BITS_RUN_64" = "yes"; then
|
||||
BITS_REQ=64
|
||||
else
|
||||
# no changes.
|
||||
BITS_OK=yes
|
||||
fi
|
||||
fi
|
||||
|
||||
# implement.
|
||||
if test "$BITS_REQ" = "32" -a "$BITS_RUN_32" = "yes"; then
|
||||
CFLAGS="${CFLAGS_32}"
|
||||
CXXFLAGS="${CXXFLAGS_32}"
|
||||
LDFLAGS="${LDFLAGS_32}"
|
||||
ARFLAGS="${ARFLAGS_32}"
|
||||
BITS_OK=yes
|
||||
elif test "$BITS_REQ" = "64" -a "$BITS_RUN_64" = "yes"; then
|
||||
CFLAGS="${CFLAGS_64}"
|
||||
CXXFLAGS="${CXXFLAGS_64}"
|
||||
LDFLAGS="${LDFLAGS_64}"
|
||||
ARFLAGS="${ARFLAGS_64}"
|
||||
BITS_OK=yes
|
||||
elif test "$BITS_OK" != "yes"; then
|
||||
AC_MSG_ERROR([Requested $BITS_REQ bit binaries but could not compile and execute them. See readme.html for help with cross compilation., and set compiler options manually.])
|
||||
fi
|
||||
fi
|
||||
])
|
||||
|
||||
# Strict compilation options.
|
||||
AC_DEFUN([AC_CHECK_STRICT_COMPILE],
|
||||
[
|
||||
AC_MSG_CHECKING([whether strict compiling is on])
|
||||
AC_ARG_ENABLE(strict,[ --enable-strict compile with strict compiler options [default=yes]], [
|
||||
if test "$enableval" = no
|
||||
then
|
||||
ac_use_strict_options=no
|
||||
else
|
||||
ac_use_strict_options=yes
|
||||
fi
|
||||
], [ac_use_strict_options=yes])
|
||||
AC_MSG_RESULT($ac_use_strict_options)
|
||||
|
||||
if test "$ac_use_strict_options" = yes
|
||||
then
|
||||
if test "$GCC" = yes
|
||||
then
|
||||
case "${host}" in
|
||||
*-*-solaris*)
|
||||
# Don't use -std=c99 option on Solaris/GCC
|
||||
;;
|
||||
*)
|
||||
# Do not use -ansi. It limits us to C90, and it breaks some platforms.
|
||||
# We use -std=c99 to disable the gnu99 defaults and its associated warnings
|
||||
CFLAGS="$CFLAGS -std=c99"
|
||||
;;
|
||||
esac
|
||||
|
||||
CFLAGS="$CFLAGS -Wall -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings"
|
||||
else
|
||||
case "${host}" in
|
||||
*-*-cygwin)
|
||||
if test "`$CC /help 2>&1 | head -c9`" = "Microsoft"
|
||||
then
|
||||
CFLAGS="$CFLAGS /W4"
|
||||
fi ;;
|
||||
*-*-mingw32|*-*-mingw64)
|
||||
CFLAGS="$CFLAGS -W4" ;;
|
||||
esac
|
||||
fi
|
||||
if test "$GXX" = yes
|
||||
then
|
||||
CXXFLAGS="$CXXFLAGS -W -Wall -pedantic -Wpointer-arith -Wwrite-strings -Wno-long-long"
|
||||
else
|
||||
case "${host}" in
|
||||
*-*-cygwin)
|
||||
if test "`$CXX /help 2>&1 | head -c9`" = "Microsoft"
|
||||
then
|
||||
CXXFLAGS="$CXXFLAGS /W4"
|
||||
fi ;;
|
||||
*-*-mingw32|*-*-mingw64)
|
||||
CFLAGS="$CFLAGS -W4" ;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
])
|
||||
|
||||
|
|
@ -1,489 +1,14 @@
|
|||
# aclocal.m4 for ICU
|
||||
# Copyright (c) 1999-2012, International Business Machines Corporation and
|
||||
# others. All Rights Reserved.
|
||||
# Stephen F. Booth
|
||||
# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
|
||||
|
||||
# @TOP@
|
||||
|
||||
# ICU_CHECK_MH_FRAG
|
||||
AC_DEFUN(ICU_CHECK_MH_FRAG, [
|
||||
AC_CACHE_CHECK(
|
||||
[which Makefile fragment to use for ${host}],
|
||||
[icu_cv_host_frag],
|
||||
[
|
||||
case "${host}" in
|
||||
*-*-solaris*)
|
||||
if test "$GCC" = yes; then
|
||||
icu_cv_host_frag=mh-solaris-gcc
|
||||
else
|
||||
icu_cv_host_frag=mh-solaris
|
||||
fi ;;
|
||||
alpha*-*-linux-gnu)
|
||||
if test "$GCC" = yes; then
|
||||
icu_cv_host_frag=mh-alpha-linux-gcc
|
||||
else
|
||||
icu_cv_host_frag=mh-alpha-linux-cc
|
||||
fi ;;
|
||||
powerpc*-*-linux*)
|
||||
if test "$GCC" = yes; then
|
||||
icu_cv_host_frag=mh-linux
|
||||
else
|
||||
icu_cv_host_frag=mh-linux-va
|
||||
fi ;;
|
||||
*-*-linux*|*-*-gnu|*-*-k*bsd*-gnu|*-*-kopensolaris*-gnu) icu_cv_host_frag=mh-linux ;;
|
||||
*-*-cygwin|*-*-mingw32)
|
||||
if test "$GCC" = yes; then
|
||||
AC_TRY_COMPILE([
|
||||
#ifndef __MINGW32__
|
||||
#error This is not MinGW
|
||||
#endif], [], icu_cv_host_frag=mh-mingw, icu_cv_host_frag=mh-cygwin)
|
||||
else
|
||||
case "${host}" in
|
||||
*-*-mingw32) icu_cv_host_frag=mh-msys-msvc ;;
|
||||
*-*-cygwin) icu_cv_host_frag=mh-cygwin-msvc ;;
|
||||
esac
|
||||
fi ;;
|
||||
*-*-*bsd*|*-*-dragonfly*) icu_cv_host_frag=mh-bsd-gcc ;;
|
||||
*-*-aix*)
|
||||
if test "$GCC" = yes; then
|
||||
icu_cv_host_frag=mh-aix-gcc
|
||||
else
|
||||
icu_cv_host_frag=mh-aix-va
|
||||
fi ;;
|
||||
*-*-hpux*)
|
||||
if test "$GCC" = yes; then
|
||||
icu_cv_host_frag=mh-hpux-gcc
|
||||
else
|
||||
case "$CXX" in
|
||||
*aCC) icu_cv_host_frag=mh-hpux-acc ;;
|
||||
esac
|
||||
fi ;;
|
||||
*-*ibm-openedition*|*-*-os390*) icu_cv_host_frag=mh-os390 ;;
|
||||
*-*-os400*) icu_cv_host_frag=mh-os400 ;;
|
||||
*-apple-rhapsody*) icu_cv_host_frag=mh-darwin ;;
|
||||
*-apple-darwin*) icu_cv_host_frag=mh-darwin ;;
|
||||
*-*-beos) icu_cv_host_frag=mh-beos ;;
|
||||
*-*-haiku) icu_cv_host_frag=mh-haiku ;;
|
||||
*-*-irix*) icu_cv_host_frag=mh-irix ;;
|
||||
*-dec-osf*) icu_cv_host_frag=mh-alpha-osf ;;
|
||||
*-*-nto*) icu_cv_host_frag=mh-qnx ;;
|
||||
*-ncr-*) icu_cv_host_frag=mh-mpras ;;
|
||||
*) icu_cv_host_frag=mh-unknown ;;
|
||||
esac
|
||||
]
|
||||
)
|
||||
])
|
||||
|
||||
# ICU_CONDITIONAL - similar example taken from Automake 1.4
|
||||
AC_DEFUN(ICU_CONDITIONAL,
|
||||
[AC_SUBST($1_TRUE)
|
||||
if $2; then
|
||||
$1_TRUE=
|
||||
else
|
||||
$1_TRUE='#'
|
||||
fi])
|
||||
|
||||
# ICU_PROG_LINK - Make sure that the linker is usable
|
||||
AC_DEFUN(ICU_PROG_LINK,
|
||||
[
|
||||
case "${host}" in
|
||||
*-*-cygwin*|*-*-mingw*)
|
||||
if test "$GCC" != yes && test -n "`link --version 2>&1 | grep 'GNU coreutils'`"; then
|
||||
AC_MSG_ERROR([link.exe is not a valid linker. Your PATH is incorrect.
|
||||
Please follow the directions in ICU's readme.])
|
||||
fi;;
|
||||
*);;
|
||||
esac])
|
||||
|
||||
# AC_SEARCH_LIBS_FIRST(FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
|
||||
# [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
|
||||
# Search for a library defining FUNC, then see if it's not already available.
|
||||
|
||||
AC_DEFUN(AC_SEARCH_LIBS_FIRST,
|
||||
[AC_PREREQ([2.13])
|
||||
AC_CACHE_CHECK([for library containing $1], [ac_cv_search_$1],
|
||||
[ac_func_search_save_LIBS="$LIBS"
|
||||
ac_cv_search_$1="no"
|
||||
for i in $2; do
|
||||
LIBS="-l$i $5 $ac_func_search_save_LIBS"
|
||||
AC_TRY_LINK_FUNC([$1],
|
||||
[ac_cv_search_$1="-l$i"
|
||||
break])
|
||||
done
|
||||
if test "$ac_cv_search_$1" = "no"; then
|
||||
AC_TRY_LINK_FUNC([$1], [ac_cv_search_$1="none required"])
|
||||
fi
|
||||
LIBS="$ac_func_search_save_LIBS"])
|
||||
if test "$ac_cv_search_$1" != "no"; then
|
||||
test "$ac_cv_search_$1" = "none required" || LIBS="$ac_cv_search_$1 $LIBS"
|
||||
$3
|
||||
else :
|
||||
$4
|
||||
fi])
|
||||
|
||||
|
||||
|
||||
# Check if we can build and use 64-bit libraries
|
||||
AC_DEFUN(AC_CHECK_64BIT_LIBS,
|
||||
[
|
||||
BITS_REQ=nochange
|
||||
ENABLE_64BIT_LIBS=unknown
|
||||
## revisit this for cross-compile.
|
||||
|
||||
AC_ARG_ENABLE(64bit-libs,
|
||||
[ --enable-64bit-libs (deprecated, use --with-library-bits) build 64-bit libraries [default= platform default]],
|
||||
[echo "note, use --with-library-bits instead of --*-64bit-libs"
|
||||
case "${enableval}" in
|
||||
no|false|32) with_library_bits=32; ;;
|
||||
yes|true|64) with_library_bits=64else32 ;;
|
||||
nochange) with_library_bits=nochange; ;;
|
||||
*) AC_MSG_ERROR(bad value ${enableval} for '--*-64bit-libs') ;;
|
||||
esac] )
|
||||
|
||||
|
||||
AC_ARG_WITH(library-bits,
|
||||
[ --with-library-bits=bits specify how many bits to use for the library (32, 64, 64else32, nochange) [default=nochange]],
|
||||
[case "${withval}" in
|
||||
""|nochange) BITS_REQ=$withval ;;
|
||||
32|64|64else32) BITS_REQ=$withval ;;
|
||||
*) AC_MSG_ERROR(bad value ${withval} for --with-library-bits) ;;
|
||||
esac])
|
||||
|
||||
# don't use these for cross compiling
|
||||
if test "$cross_compiling" = "yes" -a "${BITS_REQ}" != "nochange"; then
|
||||
AC_MSG_ERROR([Don't specify bitness when cross compiling. See readme.html for help with cross compilation., and set compiler options manually.])
|
||||
fi
|
||||
AC_CHECK_SIZEOF([void *])
|
||||
AC_MSG_CHECKING([whether runnable 64 bit binaries are built by default])
|
||||
case $ac_cv_sizeof_void_p in
|
||||
8) DEFAULT_64BIT=yes ;;
|
||||
4) DEFAULT_64BIT=no ;;
|
||||
*) DEFAULT_64BIT=unknown
|
||||
esac
|
||||
BITS_GOT=unknown
|
||||
|
||||
# 'OK' here means, we can exit any further checking, everything's copa
|
||||
BITS_OK=yes
|
||||
|
||||
# do we need to check for buildable/runnable 32 or 64 bit?
|
||||
BITS_CHECK_32=no
|
||||
BITS_CHECK_64=no
|
||||
|
||||
# later, can we run the 32/64 bit binaries so made?
|
||||
BITS_RUN_32=no
|
||||
BITS_RUN_64=no
|
||||
|
||||
if test "$DEFAULT_64BIT" = "yes"; then
|
||||
# we get 64 bits by default.
|
||||
BITS_GOT=64
|
||||
case "$BITS_REQ" in
|
||||
32)
|
||||
# need to look for 32 bit support.
|
||||
BITS_CHECK_32=yes
|
||||
# not copa.
|
||||
BITS_OK=no;;
|
||||
# everyone else is happy.
|
||||
nochange) ;;
|
||||
*) ;;
|
||||
esac
|
||||
elif test "$DEFAULT_64BIT" = "no"; then
|
||||
# not 64 bit by default.
|
||||
BITS_GOT=32
|
||||
case "$BITS_REQ" in
|
||||
64|64else32)
|
||||
BITS_CHECK_64=yes
|
||||
#BITS_CHECK_32=yes
|
||||
BITS_OK=no;;
|
||||
nochange) ;;
|
||||
*) ;;
|
||||
esac
|
||||
elif test "$DEFAULT_64BIT" = "unknown"; then
|
||||
# cross compiling.
|
||||
BITS_GOT=unknown
|
||||
case "$BITS_REQ" in
|
||||
64|64else32) BITS_OK=no
|
||||
BITS_CHECK_32=yes
|
||||
BITS_CHECK_64=yes ;;
|
||||
32) BITS_OK=no;;
|
||||
nochange) ;;
|
||||
*) ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
AC_MSG_RESULT($DEFAULT_64BIT);
|
||||
|
||||
if test "$BITS_OK" != "yes"; then
|
||||
# not copa. back these up.
|
||||
CFLAGS_OLD="${CFLAGS}"
|
||||
CXXFLAGS_OLD="${CXXFLAGS}"
|
||||
LDFLAGS_OLD="${LDFLAGS}"
|
||||
ARFLAGS_OLD="${ARFLAGS}"
|
||||
|
||||
CFLAGS_32="${CFLAGS}"
|
||||
CXXFLAGS_32="${CXXFLAGS}"
|
||||
LDFLAGS_32="${LDFLAGS}"
|
||||
ARFLAGS_32="${ARFLAGS}"
|
||||
|
||||
CFLAGS_64="${CFLAGS}"
|
||||
CXXFLAGS_64="${CXXFLAGS}"
|
||||
LDFLAGS_64="${LDFLAGS}"
|
||||
ARFLAGS_64="${ARFLAGS}"
|
||||
|
||||
CAN_BUILD_64=unknown
|
||||
CAN_BUILD_32=unknown
|
||||
# These results can't be cached because is sets compiler flags.
|
||||
if test "$BITS_CHECK_64" = "yes"; then
|
||||
AC_MSG_CHECKING([how to build 64-bit executables])
|
||||
CAN_BUILD_64=no
|
||||
####
|
||||
# Find out if we think we can *build* for 64 bit. Doesn't check whether we can run it.
|
||||
# Note, we don't have to actually check if the options work- we'll try them before using them.
|
||||
# So, only try actually testing the options, if you are trying to decide between multiple options.
|
||||
# On exit from the following clauses:
|
||||
# if CAN_BUILD_64=yes:
|
||||
# *FLAGS are assumed to contain the right settings for 64bit
|
||||
# else if CAN_BUILD_64=no: (default)
|
||||
# *FLAGS are assumed to be trashed, and will be reset from *FLAGS_OLD
|
||||
|
||||
if test "$GCC" = yes; then
|
||||
CFLAGS="${CFLAGS} -m64"
|
||||
CXXFLAGS="${CXXFLAGS} -m64"
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) {return (sizeof(void*)*8==64)?0:1;}])],
|
||||
CAN_BUILD_64=yes, CAN_BUILD_64=no)
|
||||
else
|
||||
case "${host}" in
|
||||
sparc*-*-solaris*)
|
||||
# 1. try -m64
|
||||
CFLAGS="${CFLAGS} -m64"
|
||||
CXXFLAGS="${CXXFLAGS} -m64"
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([int main(void) {return (sizeof(void*)*8==64)?0:1;}])],
|
||||
CAN_BUILD_64=yes, CAN_BUILD_64=no, CAN_BUILD_64=unknown)
|
||||
if test "$CAN_BUILD_64" != yes; then
|
||||
# Nope. back out changes.
|
||||
CFLAGS="${CFLAGS_OLD}"
|
||||
CXXFLAGS="${CFLAGS_OLD}"
|
||||
# 2. try xarch=v9 [deprecated]
|
||||
## TODO: cross compile: the following won't work.
|
||||
SPARCV9=`isainfo -n 2>&1 | grep sparcv9`
|
||||
SOL64=`$CXX -xarch=v9 2>&1 && $CC -xarch=v9 2>&1 | grep -v usage:`
|
||||
# "Warning: -xarch=v9 is deprecated, use -m64 to create 64-bit programs"
|
||||
if test -z "$SOL64" && test -n "$SPARCV9"; then
|
||||
CFLAGS="${CFLAGS} -xtarget=ultra -xarch=v9"
|
||||
CXXFLAGS="${CXXFLAGS} -xtarget=ultra -xarch=v9"
|
||||
LDFLAGS="${LDFLAGS} -xtarget=ultra -xarch=v9"
|
||||
CAN_BUILD_64=yes
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
i386-*-solaris*)
|
||||
# 1. try -m64
|
||||
CFLAGS="${CFLAGS} -m64"
|
||||
CXXFLAGS="${CXXFLAGS} -m64"
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([int main(void) {return (sizeof(void*)*8==64)?0:1;}])],
|
||||
CAN_BUILD_64=yes, CAN_BUILD_64=no, CAN_BUILD_64=unknown)
|
||||
if test "$CAN_BUILD_64" != yes; then
|
||||
# Nope. back out changes.
|
||||
CFLAGS="${CFLAGS_OLD}"
|
||||
CXXFLAGS="${CXXFLAGS_OLD}"
|
||||
# 2. try the older compiler option
|
||||
## TODO: cross compile problem
|
||||
AMD64=`isainfo -n 2>&1 | grep amd64`
|
||||
SOL64=`$CXX -xtarget=generic64 2>&1 && $CC -xtarget=generic64 2>&1 | grep -v usage:`
|
||||
if test -z "$SOL64" && test -n "$AMD64"; then
|
||||
CFLAGS="${CFLAGS} -xtarget=generic64"
|
||||
CXXFLAGS="${CXXFLAGS} -xtarget=generic64"
|
||||
CAN_BUILD_64=yes
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
ia64-*-linux*)
|
||||
# check for ecc/ecpc compiler support
|
||||
## TODO: cross compiler problem
|
||||
if test -n "`$CXX --help 2>&1 && $CC --help 2>&1 | grep -v Intel`"; then
|
||||
if test -n "`$CXX --help 2>&1 && $CC --help 2>&1 | grep -v Itanium`"; then
|
||||
CAN_BUILD_64=yes
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
*-*-cygwin)
|
||||
# vcvarsamd64.bat should have been used to enable 64-bit builds.
|
||||
# We only do this check to display the correct answer.
|
||||
## TODO: cross compiler problem
|
||||
if test -n "`$CXX -help 2>&1 | grep 'for x64'`"; then
|
||||
CAN_BUILD_64=yes
|
||||
fi
|
||||
;;
|
||||
*-*-aix*|powerpc64-*-linux*)
|
||||
CFLAGS="${CFLAGS} -q64"
|
||||
CXXFLAGS="${CXXFLAGS} -q64"
|
||||
LDFLAGS="${LDFLAGS} -q64"
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) {return (sizeof(void*)*8==64)?0:1;}])],
|
||||
CAN_BUILD_64=yes, CAN_BUILD_64=no)
|
||||
if test "$CAN_BUILD_64" = yes; then
|
||||
# worked- set other options.
|
||||
case "${host}" in
|
||||
*-*-aix*)
|
||||
# tell AIX what executable mode to use.
|
||||
ARFLAGS="${ARFLAGS} -X64"
|
||||
esac
|
||||
fi
|
||||
;;
|
||||
*-*-hpux*)
|
||||
# First we try the newer +DD64, if that doesn't work,
|
||||
# try other options.
|
||||
|
||||
CFLAGS="${CFLAGS} +DD64"
|
||||
CXXFLAGS="${CXXFLAGS} +DD64"
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) {return (sizeof(void*)*8==64)?0:1;}])],
|
||||
CAN_BUILD_64=yes, CAN_BUILD_64=no)
|
||||
if test "$CAN_BUILD_64" != yes; then
|
||||
# reset
|
||||
CFLAGS="${CFLAGS_OLD}"
|
||||
CXXFLAGS="${CXXFLAGS_OLD}"
|
||||
# append
|
||||
CFLAGS="${CFLAGS} +DA2.0W"
|
||||
CXXFLAGS="${CXXFLAGS} +DA2.0W"
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) {return (sizeof(void*)*8==64)?0:1;}])],
|
||||
CAN_BUILD_64=yes, CAN_BUILD_64=no)
|
||||
fi
|
||||
;;
|
||||
*-*ibm-openedition*|*-*-os390*)
|
||||
CFLAGS="${CFLAGS} -Wc,lp64"
|
||||
CXXFLAGS="${CXXFLAGS} -Wc,lp64"
|
||||
LDFLAGS="${LDFLAGS} -Wl,lp64"
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) {return (sizeof(void*)*8==64)?0:1;}])],
|
||||
CAN_BUILD_64=yes, CAN_BUILD_64=no)
|
||||
;;
|
||||
*)
|
||||
# unknown platform.
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
AC_MSG_RESULT($CAN_BUILD_64)
|
||||
if test "$CAN_BUILD_64" = yes; then
|
||||
AC_MSG_CHECKING([whether runnable 64-bit binaries are being built ])
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([int main(void) {return (sizeof(void*)*8==64)?0:1;}])],
|
||||
BITS_RUN_64=yes, BITS_RUN_64=no, BITS_RUN_64=unknown)
|
||||
AC_MSG_RESULT($BITS_RUN_64);
|
||||
|
||||
CFLAGS_64="${CFLAGS}"
|
||||
CXXFLAGS_64="${CXXFLAGS}"
|
||||
LDFLAGS_64="${LDFLAGS}"
|
||||
ARFLAGS_64="${ARFLAGS}"
|
||||
fi
|
||||
# put it back.
|
||||
CFLAGS="${CFLAGS_OLD}"
|
||||
CXXFLAGS="${CXXFLAGS_OLD}"
|
||||
LDFLAGS="${LDFLAGS_OLD}"
|
||||
ARFLAGS="${ARFLAGS_OLD}"
|
||||
fi
|
||||
if test "$BITS_CHECK_32" = "yes"; then
|
||||
# see comment under 'if BITS_CHECK_64', above.
|
||||
AC_MSG_CHECKING([how to build 32-bit executables])
|
||||
if test "$GCC" = yes; then
|
||||
CFLAGS="${CFLAGS} -m32"
|
||||
CXXFLAGS="${CXXFLAGS} -m32"
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) {return (sizeof(void*)*8==32)?0:1;}])],
|
||||
CAN_BUILD_32=yes, CAN_BUILD_32=no)
|
||||
fi
|
||||
AC_MSG_RESULT($CAN_BUILD_32)
|
||||
if test "$CAN_BUILD_32" = yes; then
|
||||
AC_MSG_CHECKING([whether runnable 32-bit binaries are being built ])
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([int main(void) {return (sizeof(void*)*8==32)?0:1;}])],
|
||||
BITS_RUN_32=yes, BITS_RUN_32=no, BITS_RUN_32=unknown)
|
||||
AC_MSG_RESULT($BITS_RUN_32);
|
||||
CFLAGS_32="${CFLAGS}"
|
||||
CXXFLAGS_32="${CXXFLAGS}"
|
||||
LDFLAGS_32="${LDFLAGS}"
|
||||
ARFLAGS_32="${ARFLAGS}"
|
||||
fi
|
||||
# put it back.
|
||||
CFLAGS="${CFLAGS_OLD}"
|
||||
CXXFLAGS="${CXXFLAGS_OLD}"
|
||||
LDFLAGS="${LDFLAGS_OLD}"
|
||||
ARFLAGS="${ARFLAGS_OLD}"
|
||||
fi
|
||||
|
||||
##
|
||||
# OK. Now, we've tested for 32 and 64 bitness. Let's see what we'll do.
|
||||
#
|
||||
|
||||
# First, implement 64else32
|
||||
if test "$BITS_REQ" = "64else32"; then
|
||||
if test "$BITS_RUN_64" = "yes"; then
|
||||
BITS_REQ=64
|
||||
else
|
||||
# no changes.
|
||||
BITS_OK=yes
|
||||
fi
|
||||
fi
|
||||
|
||||
# implement.
|
||||
if test "$BITS_REQ" = "32" -a "$BITS_RUN_32" = "yes"; then
|
||||
CFLAGS="${CFLAGS_32}"
|
||||
CXXFLAGS="${CXXFLAGS_32}"
|
||||
LDFLAGS="${LDFLAGS_32}"
|
||||
ARFLAGS="${ARFLAGS_32}"
|
||||
BITS_OK=yes
|
||||
elif test "$BITS_REQ" = "64" -a "$BITS_RUN_64" = "yes"; then
|
||||
CFLAGS="${CFLAGS_64}"
|
||||
CXXFLAGS="${CXXFLAGS_64}"
|
||||
LDFLAGS="${LDFLAGS_64}"
|
||||
ARFLAGS="${ARFLAGS_64}"
|
||||
BITS_OK=yes
|
||||
elif test "$BITS_OK" != "yes"; then
|
||||
AC_MSG_ERROR([Requested $BITS_REQ bit binaries but could not compile and execute them. See readme.html for help with cross compilation., and set compiler options manually.])
|
||||
fi
|
||||
fi
|
||||
])
|
||||
|
||||
# Strict compilation options.
|
||||
AC_DEFUN(AC_CHECK_STRICT_COMPILE,
|
||||
[
|
||||
AC_MSG_CHECKING([whether strict compiling is on])
|
||||
AC_ARG_ENABLE(strict,[ --enable-strict compile with strict compiler options [default=yes]], [
|
||||
if test "$enableval" = no
|
||||
then
|
||||
ac_use_strict_options=no
|
||||
else
|
||||
ac_use_strict_options=yes
|
||||
fi
|
||||
], [ac_use_strict_options=yes])
|
||||
AC_MSG_RESULT($ac_use_strict_options)
|
||||
|
||||
if test "$ac_use_strict_options" = yes
|
||||
then
|
||||
if test "$GCC" = yes
|
||||
then
|
||||
# Do not use -ansi. It limits us to C90, and it breaks some platforms.
|
||||
# We use -std=c99 to disable the gnu99 defaults and its associated warnings
|
||||
CFLAGS="$CFLAGS -Wall -std=c99 -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings"
|
||||
else
|
||||
case "${host}" in
|
||||
*-*-cygwin)
|
||||
if test "`$CC /help 2>&1 | head -c9`" = "Microsoft"
|
||||
then
|
||||
CFLAGS="$CFLAGS /W4"
|
||||
fi ;;
|
||||
*-*-mingw32)
|
||||
CFLAGS="$CFLAGS -W4" ;;
|
||||
esac
|
||||
fi
|
||||
if test "$GXX" = yes
|
||||
then
|
||||
CXXFLAGS="$CXXFLAGS -W -Wall -pedantic -Wpointer-arith -Wwrite-strings -Wno-long-long"
|
||||
else
|
||||
case "${host}" in
|
||||
*-*-cygwin)
|
||||
if test "`$CXX /help 2>&1 | head -c9`" = "Microsoft"
|
||||
then
|
||||
CXXFLAGS="$CXXFLAGS /W4"
|
||||
fi ;;
|
||||
*-*-mingw32)
|
||||
CXXFLAGS="$CXXFLAGS -W4" ;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
])
|
||||
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
||||
# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
m4_include([acinclude.m4])
|
||||
|
|
|
@ -11,6 +11,9 @@ EndProject
|
|||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "date", "..\samples\date\date.vcxproj", "{38B5751A-C6F9-4409-950C-F4F9DA17275F}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "derb", "..\tools\genrb\derb.vcxproj", "{D3065ADB-8820-4CC7-9B6C-9510833961A3}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{C2B04507-2521-4801-BF0D-5FD79D6D518C} = {C2B04507-2521-4801-BF0D-5FD79D6D518C}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "genbrk", "..\tools\genbrk\genbrk.vcxproj", "{C2BE5000-7501-4E87-9724-B8D82494FAE6}"
|
||||
EndProject
|
||||
|
@ -52,7 +55,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iotest", "..\test\iotest\io
|
|||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "icupkg", "..\tools\icupkg\icupkg.vcxproj", "{62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}"
|
||||
EndProject
|
||||
Project("{9D4211F7-2C77-439C-82F0-30A4E43BA569}") = "gendict", "..\tools\gendict\gendict.vcxproj", "{9D4211F7-2C77-439C-82F0-30A4E43BA569}"
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gendict", "..\tools\gendict\gendict.vcxproj", "{9D4211F7-2C77-439C-82F0-30A4E43BA569}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "letest", "..\test\letest\letest.vcxproj", "{67351485-4D18-4245-BE39-A7EF0675ACD2}"
|
||||
EndProject
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#******************************************************************************
|
||||
#
|
||||
# Copyright (C) 1999-2012, International Business Machines
|
||||
# Copyright (C) 1999-2013, International Business Machines
|
||||
# Corporation and others. All Rights Reserved.
|
||||
#
|
||||
#******************************************************************************
|
||||
|
@ -97,13 +97,13 @@ unistr_case_locale.o ustrcase_locale.o unistr_titlecase_brkiter.o ustr_titlecase
|
|||
normalizer2impl.o normalizer2.o filterednormalizer2.o normlzr.o unorm.o unormcmp.o unorm_it.o \
|
||||
chariter.o schriter.o uchriter.o uiter.o \
|
||||
patternprops.o uchar.o uprops.o ucase.o propname.o ubidi_props.o ubidi.o ubidiwrt.o ubidiln.o ushape.o \
|
||||
uscript.o usc_impl.o unames.o \
|
||||
uscript.o uscript_props.o usc_impl.o unames.o \
|
||||
utrie.o utrie2.o utrie2_builder.o bmpset.o unisetspan.o uset_props.o uniset_props.o uniset_closure.o uset.o uniset.o usetiter.o ruleiter.o caniter.o unifilt.o unifunct.o \
|
||||
uarrsort.o brkiter.o ubrk.o brkeng.o dictbe.o \
|
||||
rbbi.o rbbidata.o rbbinode.o rbbirb.o rbbiscan.o rbbisetb.o rbbistbl.o rbbitblb.o \
|
||||
serv.o servnotf.o servls.o servlk.o servlkf.o servrbf.o servslkf.o \
|
||||
uidna.o usprep.o uts46.o punycode.o \
|
||||
util.o util_props.o parsepos.o locbased.o cwchar.o wintz.o mutex.o dtintrv.o ucnvsel.o propsvec.o \
|
||||
util.o util_props.o parsepos.o locbased.o cwchar.o wintz.o dtintrv.o ucnvsel.o propsvec.o \
|
||||
ulist.o uloc_tag.o icudataver.o icuplug.o listformatter.o
|
||||
|
||||
## Header files to install
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
*******************************************************************************
|
||||
* Copyright (C) 2011, International Business Machines
|
||||
* Copyright (C) 2011-2012, International Business Machines
|
||||
* Corporation and others. All Rights Reserved.
|
||||
*******************************************************************************
|
||||
* file name: appendable.cpp
|
||||
|
@ -67,8 +67,6 @@ Appendable::getAppendBuffer(int32_t minCapacity,
|
|||
return scratch;
|
||||
}
|
||||
|
||||
UOBJECT_DEFINE_NO_RTTI_IMPLEMENTATION(Appendable)
|
||||
|
||||
// UnicodeStringAppendable is implemented in unistr.cpp.
|
||||
|
||||
U_NAMESPACE_END
|
||||
|
|
|
@ -690,16 +690,9 @@ BMPSet::spanBackUTF8(const uint8_t *s, int32_t length, USetSpanCondition spanCon
|
|||
|
||||
int32_t prev=length;
|
||||
UChar32 c;
|
||||
if(b<0xc0) {
|
||||
// trail byte: collect a multi-byte character
|
||||
c=utf8_prevCharSafeBody(s, 0, &length, b, -1);
|
||||
if(c<0) {
|
||||
c=0xfffd;
|
||||
}
|
||||
} else {
|
||||
// lead byte in last-trail position
|
||||
c=0xfffd;
|
||||
}
|
||||
// trail byte: collect a multi-byte character
|
||||
// (or lead byte in last-trail position)
|
||||
c=utf8_prevCharSafeBody(s, 0, &length, b, -3);
|
||||
// c is a valid code point, not ASCII, not a surrogate
|
||||
if(c<=0x7ff) {
|
||||
if((USetSpanCondition)((table7FF[c&0x3f]&((uint32_t)1<<(c>>6)))!=0) != spanCondition) {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
************************************************************************************
|
||||
* Copyright (C) 2006-2012, International Business Machines Corporation
|
||||
* Copyright (C) 2006-2013, International Business Machines Corporation
|
||||
* and others. All Rights Reserved.
|
||||
************************************************************************************
|
||||
*/
|
||||
|
@ -229,6 +229,9 @@ ICULanguageBreakFactory::loadEngineFor(UChar32 c, int32_t breakType) {
|
|||
case USCRIPT_THAI:
|
||||
engine = new ThaiBreakEngine(m, status);
|
||||
break;
|
||||
case USCRIPT_LAO:
|
||||
engine = new LaoBreakEngine(m, status);
|
||||
break;
|
||||
case USCRIPT_KHMER:
|
||||
engine = new KhmerBreakEngine(m, status);
|
||||
break;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
*******************************************************************************
|
||||
* Copyright (C) 1997-2011, International Business Machines Corporation and
|
||||
* Copyright (C) 1997-2013, International Business Machines Corporation and
|
||||
* others. All Rights Reserved.
|
||||
*******************************************************************************
|
||||
*
|
||||
|
@ -204,7 +204,6 @@ BreakIterator::getAvailableLocales(int32_t& count)
|
|||
|
||||
BreakIterator::BreakIterator()
|
||||
{
|
||||
fBufferClone = FALSE;
|
||||
*validLocale = *actualLocale = 0;
|
||||
}
|
||||
|
||||
|
@ -266,12 +265,14 @@ ICUBreakIteratorService::~ICUBreakIteratorService() {}
|
|||
|
||||
// -------------------------------------
|
||||
|
||||
// defined in ucln_cmn.h
|
||||
U_NAMESPACE_END
|
||||
|
||||
// defined in ucln_cmn.h
|
||||
|
||||
static icu::UInitOnce gInitOnce;
|
||||
static icu::ICULocaleService* gService = NULL;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Release all static memory held by breakiterator.
|
||||
*/
|
||||
|
@ -282,40 +283,33 @@ static UBool U_CALLCONV breakiterator_cleanup(void) {
|
|||
delete gService;
|
||||
gService = NULL;
|
||||
}
|
||||
gInitOnce.reset();
|
||||
#endif
|
||||
return TRUE;
|
||||
}
|
||||
U_CDECL_END
|
||||
U_NAMESPACE_BEGIN
|
||||
|
||||
static void U_CALLCONV
|
||||
initService(void) {
|
||||
gService = new ICUBreakIteratorService();
|
||||
ucln_common_registerCleanup(UCLN_COMMON_BREAKITERATOR, breakiterator_cleanup);
|
||||
}
|
||||
|
||||
static ICULocaleService*
|
||||
getService(void)
|
||||
{
|
||||
UBool needsInit;
|
||||
UMTX_CHECK(NULL, (UBool)(gService == NULL), needsInit);
|
||||
|
||||
if (needsInit) {
|
||||
ICULocaleService *tService = new ICUBreakIteratorService();
|
||||
umtx_lock(NULL);
|
||||
if (gService == NULL) {
|
||||
gService = tService;
|
||||
tService = NULL;
|
||||
ucln_common_registerCleanup(UCLN_COMMON_BREAKITERATOR, breakiterator_cleanup);
|
||||
}
|
||||
umtx_unlock(NULL);
|
||||
delete tService;
|
||||
}
|
||||
umtx_initOnce(gInitOnce, &initService);
|
||||
return gService;
|
||||
}
|
||||
|
||||
|
||||
// -------------------------------------
|
||||
|
||||
static inline UBool
|
||||
hasService(void)
|
||||
{
|
||||
UBool retVal;
|
||||
UMTX_CHECK(NULL, gService != NULL, retVal);
|
||||
return retVal;
|
||||
return !gInitOnce.isReset() && getService() != NULL;
|
||||
}
|
||||
|
||||
// -------------------------------------
|
||||
|
@ -444,6 +438,29 @@ BreakIterator::getLocaleID(ULocDataLocaleType type, UErrorCode& status) const {
|
|||
return locBased.getLocaleID(type, status);
|
||||
}
|
||||
|
||||
|
||||
// This implementation of getRuleStatus is a do-nothing stub, here to
|
||||
// provide a default implementation for any derived BreakIterator classes that
|
||||
// do not implement it themselves.
|
||||
int32_t BreakIterator::getRuleStatus() const {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// This implementation of getRuleStatusVec is a do-nothing stub, here to
|
||||
// provide a default implementation for any derived BreakIterator classes that
|
||||
// do not implement it themselves.
|
||||
int32_t BreakIterator::getRuleStatusVec(int32_t *fillInVec, int32_t capacity, UErrorCode &status) {
|
||||
if (U_FAILURE(status)) {
|
||||
return 0;
|
||||
}
|
||||
if (capacity < 1) {
|
||||
status = U_BUFFER_OVERFLOW_ERROR;
|
||||
return 1;
|
||||
}
|
||||
*fillInVec = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
U_NAMESPACE_END
|
||||
|
||||
#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
/*
|
||||
**********************************************************************
|
||||
* Copyright (C) 2013, International Business Machines
|
||||
* Corporation and others. All Rights Reserved.
|
||||
**********************************************************************
|
||||
*
|
||||
* File cmutex.h
|
||||
*
|
||||
* Minimal plain C declarations for ICU mutex functions.
|
||||
* This header provides a transition path for plain C files that
|
||||
* formerly included mutex.h, which is now a C++ only header.
|
||||
*
|
||||
* This header should not be used for new code.
|
||||
*
|
||||
* C++ files should include umutex.h, not this header.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __CMUTEX_H__
|
||||
#define __CMUTEX_H__
|
||||
|
||||
typedef struct UMutex UMutex;
|
||||
|
||||
|
||||
/* Lock a mutex.
|
||||
* @param mutex The given mutex to be locked. Pass NULL to specify
|
||||
* the global ICU mutex. Recursive locks are an error
|
||||
* and may cause a deadlock on some platforms.
|
||||
*/
|
||||
U_INTERNAL void U_EXPORT2 umtx_lock(UMutex* mutex);
|
||||
|
||||
/* Unlock a mutex.
|
||||
* @param mutex The given mutex to be unlocked. Pass NULL to specify
|
||||
* the global ICU mutex.
|
||||
*/
|
||||
U_INTERNAL void U_EXPORT2 umtx_unlock (UMutex* mutex);
|
||||
|
||||
#endif
|
||||
|
|
@ -90,7 +90,7 @@
|
|||
<StringPooling>true</StringPooling>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<DisableLanguageExtensions>true</DisableLanguageExtensions>
|
||||
<DisableLanguageExtensions>false</DisableLanguageExtensions>
|
||||
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
|
||||
<PrecompiledHeaderOutputFile>.\x86\Release/common.pch</PrecompiledHeaderOutputFile>
|
||||
<AssemblerListingLocation>.\x86\Release/</AssemblerListingLocation>
|
||||
|
@ -104,7 +104,7 @@
|
|||
<Culture>0x0409</Culture>
|
||||
</ResourceCompile>
|
||||
<Link>
|
||||
<OutputFile>..\..\bin\icuuc50.dll</OutputFile>
|
||||
<OutputFile>..\..\bin\icuuc52.dll</OutputFile>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<ProgramDatabaseFile>.\..\..\lib\icuuc.pdb</ProgramDatabaseFile>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
|
@ -129,7 +129,7 @@
|
|||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
<BufferSecurityCheck>true</BufferSecurityCheck>
|
||||
<DisableLanguageExtensions>true</DisableLanguageExtensions>
|
||||
<DisableLanguageExtensions>false</DisableLanguageExtensions>
|
||||
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
|
||||
<PrecompiledHeaderOutputFile>.\x86\Debug/common.pch</PrecompiledHeaderOutputFile>
|
||||
<AssemblerListingLocation>.\x86\Debug/</AssemblerListingLocation>
|
||||
|
@ -145,7 +145,7 @@
|
|||
<Culture>0x0409</Culture>
|
||||
</ResourceCompile>
|
||||
<Link>
|
||||
<OutputFile>..\..\bin\icuuc50d.dll</OutputFile>
|
||||
<OutputFile>..\..\bin\icuuc52d.dll</OutputFile>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<ProgramDatabaseFile>.\..\..\lib\icuucd.pdb</ProgramDatabaseFile>
|
||||
|
@ -169,7 +169,7 @@
|
|||
<StringPooling>true</StringPooling>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<DisableLanguageExtensions>true</DisableLanguageExtensions>
|
||||
<DisableLanguageExtensions>false</DisableLanguageExtensions>
|
||||
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
|
||||
<PrecompiledHeaderOutputFile>.\x64\Release/common.pch</PrecompiledHeaderOutputFile>
|
||||
<AssemblerListingLocation>.\x64\Release/</AssemblerListingLocation>
|
||||
|
@ -183,7 +183,7 @@
|
|||
<Culture>0x0409</Culture>
|
||||
</ResourceCompile>
|
||||
<Link>
|
||||
<OutputFile>..\..\bin64\icuuc50.dll</OutputFile>
|
||||
<OutputFile>..\..\bin64\icuuc52.dll</OutputFile>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<ProgramDatabaseFile>.\..\..\lib64\icuuc.pdb</ProgramDatabaseFile>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
|
@ -206,7 +206,7 @@
|
|||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
<BufferSecurityCheck>true</BufferSecurityCheck>
|
||||
<DisableLanguageExtensions>true</DisableLanguageExtensions>
|
||||
<DisableLanguageExtensions>false</DisableLanguageExtensions>
|
||||
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
|
||||
<PrecompiledHeaderOutputFile>.\x64\Debug/common.pch</PrecompiledHeaderOutputFile>
|
||||
<AssemblerListingLocation>.\x64\Debug/</AssemblerListingLocation>
|
||||
|
@ -222,7 +222,7 @@
|
|||
<Culture>0x0409</Culture>
|
||||
</ResourceCompile>
|
||||
<Link>
|
||||
<OutputFile>..\..\bin64\icuuc50d.dll</OutputFile>
|
||||
<OutputFile>..\..\bin64\icuuc52d.dll</OutputFile>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<ProgramDatabaseFile>.\..\..\lib64\icuucd.pdb</ProgramDatabaseFile>
|
||||
|
@ -237,17 +237,24 @@
|
|||
<ClCompile Include="ubidiln.c" />
|
||||
<ClCompile Include="ubidiwrt.c" />
|
||||
<ClCompile Include="ushape.cpp" />
|
||||
<ClCompile Include="brkeng.cpp" />
|
||||
<ClCompile Include="brkiter.cpp" />
|
||||
<ClCompile Include="brkeng.cpp">
|
||||
</ClCompile>
|
||||
<ClCompile Include="brkiter.cpp">
|
||||
</ClCompile>
|
||||
<ClCompile Include="dictbe.cpp" />
|
||||
<ClCompile Include="rbbi.cpp" />
|
||||
<ClCompile Include="rbbidata.cpp" />
|
||||
<ClCompile Include="rbbi.cpp">
|
||||
</ClCompile>
|
||||
<ClCompile Include="rbbidata.cpp">
|
||||
</ClCompile>
|
||||
<ClCompile Include="rbbinode.cpp" />
|
||||
<ClCompile Include="rbbirb.cpp" />
|
||||
<ClCompile Include="rbbirb.cpp">
|
||||
</ClCompile>
|
||||
<ClCompile Include="rbbiscan.cpp" />
|
||||
<ClCompile Include="rbbisetb.cpp" />
|
||||
<ClCompile Include="rbbistbl.cpp" />
|
||||
<ClCompile Include="rbbitblb.cpp" />
|
||||
<ClCompile Include="rbbistbl.cpp">
|
||||
</ClCompile>
|
||||
<ClCompile Include="rbbitblb.cpp">
|
||||
</ClCompile>
|
||||
<ClCompile Include="dictionarydata.cpp" />
|
||||
<ClCompile Include="ubrk.cpp" />
|
||||
<ClCompile Include="ucol_swp.cpp">
|
||||
|
@ -278,7 +285,6 @@
|
|||
<DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</DisableLanguageExtensions>
|
||||
<DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DisableLanguageExtensions>
|
||||
</ClCompile>
|
||||
<ClCompile Include="mutex.cpp" />
|
||||
<ClCompile Include="putil.cpp">
|
||||
<DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</DisableLanguageExtensions>
|
||||
<DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DisableLanguageExtensions>
|
||||
|
@ -302,13 +308,15 @@
|
|||
</ClCompile>
|
||||
<ClCompile Include="ucnv.c" />
|
||||
<ClCompile Include="ucnv2022.cpp" />
|
||||
<ClCompile Include="ucnv_bld.cpp" />
|
||||
<ClCompile Include="ucnv_bld.cpp">
|
||||
</ClCompile>
|
||||
<ClCompile Include="ucnv_cb.c" />
|
||||
<ClCompile Include="ucnv_cnv.c" />
|
||||
<ClCompile Include="ucnv_ct.c" />
|
||||
<ClCompile Include="ucnv_err.c" />
|
||||
<ClCompile Include="ucnv_ext.cpp" />
|
||||
<ClCompile Include="ucnv_io.cpp" />
|
||||
<ClCompile Include="ucnv_io.cpp">
|
||||
</ClCompile>
|
||||
<ClCompile Include="ucnv_lmb.c" />
|
||||
<ClCompile Include="ucnv_set.c" />
|
||||
<ClCompile Include="ucnv_u16.c" />
|
||||
|
@ -322,7 +330,8 @@
|
|||
<ClCompile Include="ucnvlat1.c" />
|
||||
<ClCompile Include="ucnvmbcs.c" />
|
||||
<ClCompile Include="ucnvscsu.c" />
|
||||
<ClCompile Include="ucnvsel.cpp" />
|
||||
<ClCompile Include="ucnvsel.cpp">
|
||||
</ClCompile>
|
||||
<ClCompile Include="cmemory.c" />
|
||||
<ClCompile Include="ucln_cmn.c">
|
||||
<DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</DisableLanguageExtensions>
|
||||
|
@ -334,7 +343,9 @@
|
|||
<ClCompile Include="udata.cpp" />
|
||||
<ClCompile Include="udatamem.c" />
|
||||
<ClCompile Include="udataswp.c" />
|
||||
<ClCompile Include="uinit.c" />
|
||||
<ClCompile Include="uinit.cpp">
|
||||
<DisableLanguageExtensions>false</DisableLanguageExtensions>
|
||||
</ClCompile>
|
||||
<ClCompile Include="umapfile.c">
|
||||
<DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</DisableLanguageExtensions>
|
||||
<DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DisableLanguageExtensions>
|
||||
|
@ -350,14 +361,18 @@
|
|||
<ClCompile Include="punycode.cpp" />
|
||||
<ClCompile Include="uidna.cpp" />
|
||||
<ClCompile Include="uts46.cpp" />
|
||||
<ClCompile Include="locavailable.cpp" />
|
||||
<ClCompile Include="locavailable.cpp">
|
||||
</ClCompile>
|
||||
<ClCompile Include="locbased.cpp" />
|
||||
<ClCompile Include="locdispnames.cpp" />
|
||||
<ClCompile Include="locid.cpp" />
|
||||
<ClCompile Include="locid.cpp">
|
||||
</ClCompile>
|
||||
<ClCompile Include="loclikely.cpp" />
|
||||
<ClCompile Include="locresdata.cpp" />
|
||||
<ClCompile Include="locutil.cpp" />
|
||||
<ClCompile Include="resbund.cpp" />
|
||||
<ClCompile Include="locutil.cpp">
|
||||
</ClCompile>
|
||||
<ClCompile Include="resbund.cpp">
|
||||
</ClCompile>
|
||||
<ClCompile Include="resbund_cnv.cpp" />
|
||||
<ClCompile Include="ucat.c" />
|
||||
<ClCompile Include="uloc.cpp" />
|
||||
|
@ -365,19 +380,25 @@
|
|||
<ClCompile Include="ures_cnv.c" />
|
||||
<ClCompile Include="uresbund.cpp" />
|
||||
<ClCompile Include="uresdata.c" />
|
||||
<ClCompile Include="caniter.cpp" />
|
||||
<ClCompile Include="caniter.cpp">
|
||||
</ClCompile>
|
||||
<ClCompile Include="filterednormalizer2.cpp" />
|
||||
<ClCompile Include="normalizer2.cpp" />
|
||||
<ClCompile Include="normalizer2impl.cpp" />
|
||||
<ClCompile Include="normlzr.cpp" />
|
||||
<ClCompile Include="normalizer2.cpp">
|
||||
</ClCompile>
|
||||
<ClCompile Include="normalizer2impl.cpp">
|
||||
</ClCompile>
|
||||
<ClCompile Include="normlzr.cpp">
|
||||
</ClCompile>
|
||||
<ClCompile Include="unorm.cpp" />
|
||||
<ClCompile Include="unorm_it.c" />
|
||||
<ClCompile Include="unormcmp.cpp" />
|
||||
<ClCompile Include="bmpset.cpp" />
|
||||
<ClCompile Include="patternprops.cpp" />
|
||||
<ClCompile Include="propname.cpp" />
|
||||
<ClCompile Include="propname.cpp">
|
||||
</ClCompile>
|
||||
<ClCompile Include="ruleiter.cpp" />
|
||||
<ClCompile Include="ucase.cpp" />
|
||||
<ClCompile Include="ucase.cpp">
|
||||
</ClCompile>
|
||||
<ClCompile Include="uchar.c" />
|
||||
<ClCompile Include="unames.cpp" />
|
||||
<ClCompile Include="unifilt.cpp" />
|
||||
|
@ -389,17 +410,25 @@
|
|||
<ClCompile Include="uprops.cpp" />
|
||||
<ClCompile Include="usc_impl.c" />
|
||||
<ClCompile Include="uscript.c" />
|
||||
<ClCompile Include="uscript_props.cpp" />
|
||||
<ClCompile Include="uset.cpp" />
|
||||
<ClCompile Include="uset_props.cpp" />
|
||||
<ClCompile Include="usetiter.cpp" />
|
||||
<ClCompile Include="icuplug.c" />
|
||||
<ClCompile Include="serv.cpp" />
|
||||
<ClCompile Include="servlk.cpp" />
|
||||
<ClCompile Include="servlkf.cpp" />
|
||||
<ClCompile Include="servls.cpp" />
|
||||
<ClCompile Include="servnotf.cpp" />
|
||||
<ClCompile Include="servrbf.cpp" />
|
||||
<ClCompile Include="servslkf.cpp" />
|
||||
<ClCompile Include="serv.cpp">
|
||||
</ClCompile>
|
||||
<ClCompile Include="servlk.cpp">
|
||||
</ClCompile>
|
||||
<ClCompile Include="servlkf.cpp">
|
||||
</ClCompile>
|
||||
<ClCompile Include="servls.cpp">
|
||||
</ClCompile>
|
||||
<ClCompile Include="servnotf.cpp">
|
||||
</ClCompile>
|
||||
<ClCompile Include="servrbf.cpp">
|
||||
</ClCompile>
|
||||
<ClCompile Include="servslkf.cpp">
|
||||
</ClCompile>
|
||||
<ClCompile Include="usprep.cpp" />
|
||||
<ClCompile Include="appendable.cpp" />
|
||||
<ClCompile Include="bytestream.cpp" />
|
||||
|
@ -437,7 +466,8 @@
|
|||
<ClCompile Include="ustrtrns.cpp" />
|
||||
<ClCompile Include="utext.cpp" />
|
||||
<ClCompile Include="utf_impl.c" />
|
||||
<ClCompile Include="listformatter.cpp" />
|
||||
<ClCompile Include="listformatter.cpp">
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<CustomBuild Include="unicode\ubidi.h">
|
||||
|
@ -580,7 +610,20 @@
|
|||
<ClInclude Include="uenumimp.h" />
|
||||
<ClInclude Include="uhash.h" />
|
||||
<ClInclude Include="ulist.h" />
|
||||
<ClInclude Include="unicode\enumset.h" />
|
||||
<CustomBuild Include="unicode\enumset.h">
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode
|
||||
</Command>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode
|
||||
</Command>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode
|
||||
</Command>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode
|
||||
</Command>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
|
||||
</CustomBuild>
|
||||
<ClInclude Include="ustrenum.h" />
|
||||
<ClInclude Include="utrie.h" />
|
||||
<ClInclude Include="utrie2.h" />
|
||||
|
@ -1708,4 +1751,4 @@
|
|||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
|
|
|
@ -154,9 +154,6 @@
|
|||
<ClCompile Include="locmap.c">
|
||||
<Filter>configuration</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="mutex.cpp">
|
||||
<Filter>configuration</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="putil.cpp">
|
||||
<Filter>configuration</Filter>
|
||||
</ClCompile>
|
||||
|
@ -259,7 +256,7 @@
|
|||
<ClCompile Include="udataswp.c">
|
||||
<Filter>data & memory</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="uinit.c">
|
||||
<ClCompile Include="uinit.cpp">
|
||||
<Filter>data & memory</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="umapfile.c">
|
||||
|
@ -406,6 +403,9 @@
|
|||
<ClCompile Include="uscript.c">
|
||||
<Filter>properties & sets</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="uscript_props.cpp">
|
||||
<Filter>properties & sets</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="uset.cpp">
|
||||
<Filter>properties & sets</Filter>
|
||||
</ClCompile>
|
||||
|
@ -523,19 +523,45 @@
|
|||
<ClCompile Include="utf_impl.c">
|
||||
<Filter>strings</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="dictionarydata.cpp" />
|
||||
<ClCompile Include="ucnv_ct.c" />
|
||||
<ClCompile Include="patternprops.cpp" />
|
||||
<ClCompile Include="appendable.cpp" />
|
||||
<ClCompile Include="bytestrie.cpp" />
|
||||
<ClCompile Include="bytestriebuilder.cpp" />
|
||||
<ClCompile Include="bytestrieiterator.cpp" />
|
||||
<ClCompile Include="messagepattern.cpp" />
|
||||
<ClCompile Include="stringtriebuilder.cpp" />
|
||||
<ClCompile Include="ucharstrie.cpp" />
|
||||
<ClCompile Include="ucharstriebuilder.cpp" />
|
||||
<ClCompile Include="ucharstrieiterator.cpp" />
|
||||
<ClCompile Include="listformatter.cpp" />
|
||||
<ClCompile Include="bytestrie.cpp">
|
||||
<Filter>collections</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="bytestrieiterator.cpp">
|
||||
<Filter>collections</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="bytestriebuilder.cpp">
|
||||
<Filter>collections</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="listformatter.cpp">
|
||||
<Filter>formatting</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="messagepattern.cpp">
|
||||
<Filter>formatting</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="appendable.cpp">
|
||||
<Filter>strings</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="dictionarydata.cpp">
|
||||
<Filter>break iteration</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="ucnv_ct.c">
|
||||
<Filter>conversion</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="ucharstrie.cpp">
|
||||
<Filter>collections</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="ucharstriebuilder.cpp">
|
||||
<Filter>collections</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="ucharstrieiterator.cpp">
|
||||
<Filter>collections</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="patternprops.cpp">
|
||||
<Filter>properties & sets</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="stringtriebuilder.cpp">
|
||||
<Filter>collections</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="ubidi_props.h">
|
||||
|
@ -784,9 +810,6 @@
|
|||
<ClInclude Include="ustr_imp.h">
|
||||
<Filter>strings</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="dictionarydata.h" />
|
||||
<ClInclude Include="messageimpl.h" />
|
||||
<ClInclude Include="patternprops.h" />
|
||||
<ClInclude Include="utypeinfo.h">
|
||||
<Filter>configuration</Filter>
|
||||
</ClInclude>
|
||||
|
@ -808,8 +831,14 @@
|
|||
<ClInclude Include="uchar_props_data.h">
|
||||
<Filter>properties & sets</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="unicode\enumset.h">
|
||||
<Filter>data & memory</Filter>
|
||||
<ClInclude Include="messageimpl.h">
|
||||
<Filter>formatting</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="dictionarydata.h">
|
||||
<Filter>break iteration</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="patternprops.h">
|
||||
<Filter>properties & sets</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
@ -1037,15 +1066,38 @@
|
|||
<CustomBuild Include="unicode\utf_old.h">
|
||||
<Filter>strings</Filter>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="unicode\icuplug.h" />
|
||||
<CustomBuild Include="unicode\appendable.h" />
|
||||
<CustomBuild Include="unicode\bytestrie.h" />
|
||||
<CustomBuild Include="unicode\bytestriebuilder.h" />
|
||||
<CustomBuild Include="unicode\messagepattern.h" />
|
||||
<CustomBuild Include="unicode\stringtriebuilder.h" />
|
||||
<CustomBuild Include="unicode\ucharstrie.h" />
|
||||
<CustomBuild Include="unicode\ucharstriebuilder.h" />
|
||||
<CustomBuild Include="unicode\ustringtrie.h" />
|
||||
<CustomBuild Include="unicode\listformatter.h" />
|
||||
<CustomBuild Include="unicode\bytestrie.h">
|
||||
<Filter>collections</Filter>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="unicode\bytestriebuilder.h">
|
||||
<Filter>collections</Filter>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="unicode\messagepattern.h">
|
||||
<Filter>formatting</Filter>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="unicode\listformatter.h">
|
||||
<Filter>formatting</Filter>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="unicode\appendable.h">
|
||||
<Filter>strings</Filter>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="unicode\ustringtrie.h">
|
||||
<Filter>collections</Filter>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="unicode\ucharstrie.h">
|
||||
<Filter>collections</Filter>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="unicode\ucharstriebuilder.h">
|
||||
<Filter>collections</Filter>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="unicode\enumset.h">
|
||||
<Filter>data & memory</Filter>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="unicode\icuplug.h">
|
||||
<Filter>configuration</Filter>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="unicode\stringtriebuilder.h">
|
||||
<Filter>collections</Filter>
|
||||
</CustomBuild>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
*******************************************************************************
|
||||
* Copyright (C) 2006-2012, International Business Machines Corporation
|
||||
* Copyright (C) 2006-2013, International Business Machines Corporation
|
||||
* and others. All Rights Reserved.
|
||||
*******************************************************************************
|
||||
*/
|
||||
|
@ -88,10 +88,10 @@ DictionaryBreakEngine::setCharacters( const UnicodeSet &set ) {
|
|||
|
||||
/*
|
||||
******************************************************************
|
||||
* PossibleWord
|
||||
*/
|
||||
|
||||
|
||||
// Helper class for improving readability of the Thai word break
|
||||
// Helper class for improving readability of the Thai/Lao/Khmer word break
|
||||
// algorithm. The implementation is completely inline.
|
||||
|
||||
// List size, limited by the maximum number of words in the dictionary
|
||||
|
@ -183,6 +183,11 @@ PossibleWord::markCurrent() {
|
|||
mark = current;
|
||||
}
|
||||
|
||||
/*
|
||||
******************************************************************
|
||||
* ThaiBreakEngine
|
||||
*/
|
||||
|
||||
// How many words in a row are "good enough"?
|
||||
#define THAI_LOOKAHEAD 3
|
||||
|
||||
|
@ -415,6 +420,203 @@ foundBest:
|
|||
return wordsFound;
|
||||
}
|
||||
|
||||
/*
|
||||
******************************************************************
|
||||
* LaoBreakEngine
|
||||
*/
|
||||
|
||||
// How many words in a row are "good enough"?
|
||||
#define LAO_LOOKAHEAD 3
|
||||
|
||||
// Will not combine a non-word with a preceding dictionary word longer than this
|
||||
#define LAO_ROOT_COMBINE_THRESHOLD 3
|
||||
|
||||
// Will not combine a non-word that shares at least this much prefix with a
|
||||
// dictionary word, with a preceding word
|
||||
#define LAO_PREFIX_COMBINE_THRESHOLD 3
|
||||
|
||||
// Minimum word size
|
||||
#define LAO_MIN_WORD 2
|
||||
|
||||
// Minimum number of characters for two words
|
||||
#define LAO_MIN_WORD_SPAN (LAO_MIN_WORD * 2)
|
||||
|
||||
LaoBreakEngine::LaoBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCode &status)
|
||||
: DictionaryBreakEngine((1<<UBRK_WORD) | (1<<UBRK_LINE)),
|
||||
fDictionary(adoptDictionary)
|
||||
{
|
||||
fLaoWordSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Laoo:]&[:LineBreak=SA:]]"), status);
|
||||
if (U_SUCCESS(status)) {
|
||||
setCharacters(fLaoWordSet);
|
||||
}
|
||||
fMarkSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Laoo:]&[:LineBreak=SA:]&[:M:]]"), status);
|
||||
fMarkSet.add(0x0020);
|
||||
fEndWordSet = fLaoWordSet;
|
||||
fEndWordSet.remove(0x0EC0, 0x0EC4); // prefix vowels
|
||||
fBeginWordSet.add(0x0E81, 0x0EAE); // basic consonants (including holes for corresponding Thai characters)
|
||||
fBeginWordSet.add(0x0EDC, 0x0EDD); // digraph consonants (no Thai equivalent)
|
||||
fBeginWordSet.add(0x0EC0, 0x0EC4); // prefix vowels
|
||||
|
||||
// Compact for caching.
|
||||
fMarkSet.compact();
|
||||
fEndWordSet.compact();
|
||||
fBeginWordSet.compact();
|
||||
}
|
||||
|
||||
LaoBreakEngine::~LaoBreakEngine() {
|
||||
delete fDictionary;
|
||||
}
|
||||
|
||||
int32_t
|
||||
LaoBreakEngine::divideUpDictionaryRange( UText *text,
|
||||
int32_t rangeStart,
|
||||
int32_t rangeEnd,
|
||||
UStack &foundBreaks ) const {
|
||||
if ((rangeEnd - rangeStart) < LAO_MIN_WORD_SPAN) {
|
||||
return 0; // Not enough characters for two words
|
||||
}
|
||||
|
||||
uint32_t wordsFound = 0;
|
||||
int32_t wordLength;
|
||||
int32_t current;
|
||||
UErrorCode status = U_ZERO_ERROR;
|
||||
PossibleWord words[LAO_LOOKAHEAD];
|
||||
UChar32 uc;
|
||||
|
||||
utext_setNativeIndex(text, rangeStart);
|
||||
|
||||
while (U_SUCCESS(status) && (current = (int32_t)utext_getNativeIndex(text)) < rangeEnd) {
|
||||
wordLength = 0;
|
||||
|
||||
// Look for candidate words at the current position
|
||||
int candidates = words[wordsFound%LAO_LOOKAHEAD].candidates(text, fDictionary, rangeEnd);
|
||||
|
||||
// If we found exactly one, use that
|
||||
if (candidates == 1) {
|
||||
wordLength = words[wordsFound % LAO_LOOKAHEAD].acceptMarked(text);
|
||||
wordsFound += 1;
|
||||
}
|
||||
// If there was more than one, see which one can take us forward the most words
|
||||
else if (candidates > 1) {
|
||||
// If we're already at the end of the range, we're done
|
||||
if ((int32_t)utext_getNativeIndex(text) >= rangeEnd) {
|
||||
goto foundBest;
|
||||
}
|
||||
do {
|
||||
int wordsMatched = 1;
|
||||
if (words[(wordsFound + 1) % LAO_LOOKAHEAD].candidates(text, fDictionary, rangeEnd) > 0) {
|
||||
if (wordsMatched < 2) {
|
||||
// Followed by another dictionary word; mark first word as a good candidate
|
||||
words[wordsFound%LAO_LOOKAHEAD].markCurrent();
|
||||
wordsMatched = 2;
|
||||
}
|
||||
|
||||
// If we're already at the end of the range, we're done
|
||||
if ((int32_t)utext_getNativeIndex(text) >= rangeEnd) {
|
||||
goto foundBest;
|
||||
}
|
||||
|
||||
// See if any of the possible second words is followed by a third word
|
||||
do {
|
||||
// If we find a third word, stop right away
|
||||
if (words[(wordsFound + 2) % LAO_LOOKAHEAD].candidates(text, fDictionary, rangeEnd)) {
|
||||
words[wordsFound % LAO_LOOKAHEAD].markCurrent();
|
||||
goto foundBest;
|
||||
}
|
||||
}
|
||||
while (words[(wordsFound + 1) % LAO_LOOKAHEAD].backUp(text));
|
||||
}
|
||||
}
|
||||
while (words[wordsFound % LAO_LOOKAHEAD].backUp(text));
|
||||
foundBest:
|
||||
wordLength = words[wordsFound % LAO_LOOKAHEAD].acceptMarked(text);
|
||||
wordsFound += 1;
|
||||
}
|
||||
|
||||
// We come here after having either found a word or not. We look ahead to the
|
||||
// next word. If it's not a dictionary word, we will combine it withe the word we
|
||||
// just found (if there is one), but only if the preceding word does not exceed
|
||||
// the threshold.
|
||||
// The text iterator should now be positioned at the end of the word we found.
|
||||
if ((int32_t)utext_getNativeIndex(text) < rangeEnd && wordLength < LAO_ROOT_COMBINE_THRESHOLD) {
|
||||
// if it is a dictionary word, do nothing. If it isn't, then if there is
|
||||
// no preceding word, or the non-word shares less than the minimum threshold
|
||||
// of characters with a dictionary word, then scan to resynchronize
|
||||
if (words[wordsFound % LAO_LOOKAHEAD].candidates(text, fDictionary, rangeEnd) <= 0
|
||||
&& (wordLength == 0
|
||||
|| words[wordsFound%LAO_LOOKAHEAD].longestPrefix() < LAO_PREFIX_COMBINE_THRESHOLD)) {
|
||||
// Look for a plausible word boundary
|
||||
//TODO: This section will need a rework for UText.
|
||||
int32_t remaining = rangeEnd - (current+wordLength);
|
||||
UChar32 pc = utext_current32(text);
|
||||
int32_t chars = 0;
|
||||
for (;;) {
|
||||
utext_next32(text);
|
||||
uc = utext_current32(text);
|
||||
// TODO: Here we're counting on the fact that the SA languages are all
|
||||
// in the BMP. This should get fixed with the UText rework.
|
||||
chars += 1;
|
||||
if (--remaining <= 0) {
|
||||
break;
|
||||
}
|
||||
if (fEndWordSet.contains(pc) && fBeginWordSet.contains(uc)) {
|
||||
// Maybe. See if it's in the dictionary.
|
||||
int candidates = words[(wordsFound + 1) % LAO_LOOKAHEAD].candidates(text, fDictionary, rangeEnd);
|
||||
utext_setNativeIndex(text, current + wordLength + chars);
|
||||
if (candidates > 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
pc = uc;
|
||||
}
|
||||
|
||||
// Bump the word count if there wasn't already one
|
||||
if (wordLength <= 0) {
|
||||
wordsFound += 1;
|
||||
}
|
||||
|
||||
// Update the length with the passed-over characters
|
||||
wordLength += chars;
|
||||
}
|
||||
else {
|
||||
// Back up to where we were for next iteration
|
||||
utext_setNativeIndex(text, current+wordLength);
|
||||
}
|
||||
}
|
||||
|
||||
// Never stop before a combining mark.
|
||||
int32_t currPos;
|
||||
while ((currPos = (int32_t)utext_getNativeIndex(text)) < rangeEnd && fMarkSet.contains(utext_current32(text))) {
|
||||
utext_next32(text);
|
||||
wordLength += (int32_t)utext_getNativeIndex(text) - currPos;
|
||||
}
|
||||
|
||||
// Look ahead for possible suffixes if a dictionary word does not follow.
|
||||
// We do this in code rather than using a rule so that the heuristic
|
||||
// resynch continues to function. For example, one of the suffix characters
|
||||
// could be a typo in the middle of a word.
|
||||
// NOT CURRENTLY APPLICABLE TO LAO
|
||||
|
||||
// Did we find a word on this iteration? If so, push it on the break stack
|
||||
if (wordLength > 0) {
|
||||
foundBreaks.push((current+wordLength), status);
|
||||
}
|
||||
}
|
||||
|
||||
// Don't return a break for the end of the dictionary range if there is one there.
|
||||
if (foundBreaks.peeki() >= rangeEnd) {
|
||||
(void) foundBreaks.popi();
|
||||
wordsFound -= 1;
|
||||
}
|
||||
|
||||
return wordsFound;
|
||||
}
|
||||
|
||||
/*
|
||||
******************************************************************
|
||||
* KhmerBreakEngine
|
||||
*/
|
||||
|
||||
// How many words in a row are "good enough"?
|
||||
#define KHMER_LOOKAHEAD 3
|
||||
|
||||
|
@ -667,7 +869,8 @@ CjkBreakEngine::CjkBreakEngine(DictionaryMatcher *adoptDictionary, LanguageType
|
|||
cjSet.addAll(fHanWordSet);
|
||||
cjSet.addAll(fKatakanaWordSet);
|
||||
cjSet.addAll(fHiraganaWordSet);
|
||||
cjSet.add(UNICODE_STRING_SIMPLE("\\uff70\\u30fc"));
|
||||
cjSet.add(0xFF70); // HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
|
||||
cjSet.add(0x30FC); // KATAKANA-HIRAGANA PROLONGED SOUND MARK
|
||||
setCharacters(cjSet);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
*******************************************************************************
|
||||
* Copyright (C) 2006,2012, International Business Machines Corporation *
|
||||
* Copyright (C) 2006,2012-2013, International Business Machines Corporation *
|
||||
* and others. All Rights Reserved. *
|
||||
*******************************************************************************
|
||||
*/
|
||||
|
@ -186,6 +186,118 @@ class ThaiBreakEngine : public DictionaryBreakEngine {
|
|||
|
||||
};
|
||||
|
||||
/*******************************************************************
|
||||
* LaoBreakEngine
|
||||
*/
|
||||
|
||||
/**
|
||||
* <p>LaoBreakEngine is a kind of DictionaryBreakEngine that uses a
|
||||
* dictionary and heuristics to determine Lao-specific breaks.</p>
|
||||
*
|
||||
* <p>After it is constructed a LaoBreakEngine may be shared between
|
||||
* threads without synchronization.</p>
|
||||
*/
|
||||
class LaoBreakEngine : public DictionaryBreakEngine {
|
||||
private:
|
||||
/**
|
||||
* The set of characters handled by this engine
|
||||
* @internal
|
||||
*/
|
||||
|
||||
UnicodeSet fLaoWordSet;
|
||||
UnicodeSet fEndWordSet;
|
||||
UnicodeSet fBeginWordSet;
|
||||
UnicodeSet fMarkSet;
|
||||
DictionaryMatcher *fDictionary;
|
||||
|
||||
public:
|
||||
|
||||
/**
|
||||
* <p>Default constructor.</p>
|
||||
*
|
||||
* @param adoptDictionary A DictionaryMatcher to adopt. Deleted when the
|
||||
* engine is deleted.
|
||||
*/
|
||||
LaoBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCode &status);
|
||||
|
||||
/**
|
||||
* <p>Virtual destructor.</p>
|
||||
*/
|
||||
virtual ~LaoBreakEngine();
|
||||
|
||||
protected:
|
||||
/**
|
||||
* <p>Divide up a range of known dictionary characters handled by this break engine.</p>
|
||||
*
|
||||
* @param text A UText representing the text
|
||||
* @param rangeStart The start of the range of dictionary characters
|
||||
* @param rangeEnd The end of the range of dictionary characters
|
||||
* @param foundBreaks Output of C array of int32_t break positions, or 0
|
||||
* @return The number of breaks found
|
||||
*/
|
||||
virtual int32_t divideUpDictionaryRange( UText *text,
|
||||
int32_t rangeStart,
|
||||
int32_t rangeEnd,
|
||||
UStack &foundBreaks ) const;
|
||||
|
||||
};
|
||||
|
||||
/*******************************************************************
|
||||
* KhmerBreakEngine
|
||||
*/
|
||||
|
||||
/**
|
||||
* <p>KhmerBreakEngine is a kind of DictionaryBreakEngine that uses a
|
||||
* DictionaryMatcher and heuristics to determine Khmer-specific breaks.</p>
|
||||
*
|
||||
* <p>After it is constructed a KhmerBreakEngine may be shared between
|
||||
* threads without synchronization.</p>
|
||||
*/
|
||||
class KhmerBreakEngine : public DictionaryBreakEngine {
|
||||
private:
|
||||
/**
|
||||
* The set of characters handled by this engine
|
||||
* @internal
|
||||
*/
|
||||
|
||||
UnicodeSet fKhmerWordSet;
|
||||
UnicodeSet fEndWordSet;
|
||||
UnicodeSet fBeginWordSet;
|
||||
UnicodeSet fMarkSet;
|
||||
DictionaryMatcher *fDictionary;
|
||||
|
||||
public:
|
||||
|
||||
/**
|
||||
* <p>Default constructor.</p>
|
||||
*
|
||||
* @param adoptDictionary A DictionaryMatcher to adopt. Deleted when the
|
||||
* engine is deleted.
|
||||
*/
|
||||
KhmerBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCode &status);
|
||||
|
||||
/**
|
||||
* <p>Virtual destructor.</p>
|
||||
*/
|
||||
virtual ~KhmerBreakEngine();
|
||||
|
||||
protected:
|
||||
/**
|
||||
* <p>Divide up a range of known dictionary characters.</p>
|
||||
*
|
||||
* @param text A UText representing the text
|
||||
* @param rangeStart The start of the range of dictionary characters
|
||||
* @param rangeEnd The end of the range of dictionary characters
|
||||
* @param foundBreaks Output of C array of int32_t break positions, or 0
|
||||
* @return The number of breaks found
|
||||
*/
|
||||
virtual int32_t divideUpDictionaryRange( UText *text,
|
||||
int32_t rangeStart,
|
||||
int32_t rangeEnd,
|
||||
UStack &foundBreaks ) const;
|
||||
|
||||
};
|
||||
|
||||
#if !UCONFIG_NO_NORMALIZATION
|
||||
|
||||
/*******************************************************************
|
||||
|
@ -251,63 +363,6 @@ class CjkBreakEngine : public DictionaryBreakEngine {
|
|||
|
||||
#endif
|
||||
|
||||
/*******************************************************************
|
||||
* KhmerBreakEngine
|
||||
*/
|
||||
|
||||
/**
|
||||
* <p>KhmerBreakEngine is a kind of DictionaryBreakEngine that uses a
|
||||
* DictionaryMatcher and heuristics to determine Khmer-specific breaks.</p>
|
||||
*
|
||||
* <p>After it is constructed a KhmerBreakEngine may be shared between
|
||||
* threads without synchronization.</p>
|
||||
*/
|
||||
class KhmerBreakEngine : public DictionaryBreakEngine {
|
||||
private:
|
||||
/**
|
||||
* The set of characters handled by this engine
|
||||
* @internal
|
||||
*/
|
||||
|
||||
UnicodeSet fKhmerWordSet;
|
||||
UnicodeSet fEndWordSet;
|
||||
UnicodeSet fBeginWordSet;
|
||||
UnicodeSet fMarkSet;
|
||||
DictionaryMatcher *fDictionary;
|
||||
|
||||
public:
|
||||
|
||||
/**
|
||||
* <p>Default constructor.</p>
|
||||
*
|
||||
* @param adoptDictionary A DictionaryMatcher to adopt. Deleted when the
|
||||
* engine is deleted.
|
||||
*/
|
||||
KhmerBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCode &status);
|
||||
|
||||
/**
|
||||
* <p>Virtual destructor.</p>
|
||||
*/
|
||||
virtual ~KhmerBreakEngine();
|
||||
|
||||
protected:
|
||||
/**
|
||||
* <p>Divide up a range of known dictionary characters.</p>
|
||||
*
|
||||
* @param text A UText representing the text
|
||||
* @param rangeStart The start of the range of dictionary characters
|
||||
* @param rangeEnd The end of the range of dictionary characters
|
||||
* @param foundBreaks Output of C array of int32_t break positions, or 0
|
||||
* @return The number of breaks found
|
||||
*/
|
||||
virtual int32_t divideUpDictionaryRange( UText *text,
|
||||
int32_t rangeStart,
|
||||
int32_t rangeEnd,
|
||||
UStack &foundBreaks ) const;
|
||||
|
||||
};
|
||||
|
||||
|
||||
U_NAMESPACE_END
|
||||
|
||||
/* DICTBE_H */
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
*******************************************************************************
|
||||
* Copyright (C) 2012, International Business Machines
|
||||
* Copyright (C) 2013, International Business Machines
|
||||
* Corporation and others. All Rights Reserved.
|
||||
*******************************************************************************
|
||||
* dictionarydata.h
|
||||
|
@ -19,11 +19,16 @@
|
|||
|
||||
U_NAMESPACE_BEGIN
|
||||
|
||||
#ifndef CYGWINMSVC /* On Cygwin/MSVC, the error redefinition of symbols occurs.*/
|
||||
const int32_t DictionaryData::TRIE_TYPE_BYTES;
|
||||
const int32_t DictionaryData::TRIE_TYPE_UCHARS;
|
||||
#endif
|
||||
const int32_t DictionaryData::TRIE_TYPE_BYTES = 0;
|
||||
const int32_t DictionaryData::TRIE_TYPE_UCHARS = 1;
|
||||
const int32_t DictionaryData::TRIE_TYPE_MASK = 7;
|
||||
const int32_t DictionaryData::TRIE_HAS_VALUES = 8;
|
||||
|
||||
const int32_t DictionaryData::TRANSFORM_NONE = 0;
|
||||
const int32_t DictionaryData::TRANSFORM_TYPE_OFFSET = 0x1000000;
|
||||
const int32_t DictionaryData::TRANSFORM_TYPE_MASK = 0x7f000000;
|
||||
const int32_t DictionaryData::TRANSFORM_OFFSET_MASK = 0x1fffff;
|
||||
|
||||
DictionaryMatcher::~DictionaryMatcher() {
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
*******************************************************************************
|
||||
* Copyright (C) 2012, International Business Machines
|
||||
* Copyright (C) 2013, International Business Machines
|
||||
* Corporation and others. All Rights Reserved.
|
||||
*******************************************************************************
|
||||
* dictionarydata.h
|
||||
|
@ -29,15 +29,15 @@ class BytesTrie;
|
|||
|
||||
class U_COMMON_API DictionaryData : public UMemory {
|
||||
public:
|
||||
static const int32_t TRIE_TYPE_BYTES = 0;
|
||||
static const int32_t TRIE_TYPE_UCHARS = 1;
|
||||
static const int32_t TRIE_TYPE_MASK = 7;
|
||||
static const int32_t TRIE_HAS_VALUES = 8;
|
||||
static const int32_t TRIE_TYPE_BYTES; // = 0;
|
||||
static const int32_t TRIE_TYPE_UCHARS; // = 1;
|
||||
static const int32_t TRIE_TYPE_MASK; // = 7;
|
||||
static const int32_t TRIE_HAS_VALUES; // = 8;
|
||||
|
||||
static const int32_t TRANSFORM_NONE = 0;
|
||||
static const int32_t TRANSFORM_TYPE_OFFSET = 0x1000000;
|
||||
static const int32_t TRANSFORM_TYPE_MASK = 0x7f000000;
|
||||
static const int32_t TRANSFORM_OFFSET_MASK = 0x1fffff;
|
||||
static const int32_t TRANSFORM_NONE; // = 0;
|
||||
static const int32_t TRANSFORM_TYPE_OFFSET; // = 0x1000000;
|
||||
static const int32_t TRANSFORM_TYPE_MASK; // = 0x7f000000;
|
||||
static const int32_t TRANSFORM_OFFSET_MASK; // = 0x1fffff;
|
||||
|
||||
enum {
|
||||
// Byte offsets from the start of the data, after the generic header.
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
*******************************************************************************
|
||||
*
|
||||
* Copyright (C) 2012, International Business Machines
|
||||
* Copyright (C) 2013, International Business Machines
|
||||
* Corporation and others. All Rights Reserved.
|
||||
*
|
||||
*******************************************************************************
|
||||
|
@ -21,6 +21,7 @@
|
|||
#include "ulocimp.h"
|
||||
#include "charstr.h"
|
||||
#include "ucln_cmn.h"
|
||||
#include "uresimp.h"
|
||||
|
||||
U_NAMESPACE_BEGIN
|
||||
|
||||
|
@ -28,6 +29,7 @@ static Hashtable* listPatternHash = NULL;
|
|||
static UMutex listFormatterMutex = U_MUTEX_INITIALIZER;
|
||||
static UChar FIRST_PARAMETER[] = { 0x7b, 0x30, 0x7d }; // "{0}"
|
||||
static UChar SECOND_PARAMETER[] = { 0x7b, 0x31, 0x7d }; // "{0}"
|
||||
static const char *STANDARD_STYLE = "standard";
|
||||
|
||||
U_CDECL_BEGIN
|
||||
static UBool U_CALLCONV uprv_listformatter_cleanup() {
|
||||
|
@ -43,6 +45,17 @@ uprv_deleteListFormatData(void *obj) {
|
|||
|
||||
U_CDECL_END
|
||||
|
||||
static ListFormatData* loadListFormatData(const Locale& locale, const char* style, UErrorCode& errorCode);
|
||||
static void getStringByKey(const UResourceBundle* rb, const char* key, UnicodeString& result, UErrorCode& errorCode);
|
||||
|
||||
ListFormatter::ListFormatter(const ListFormatter& other) : data(other.data) {
|
||||
}
|
||||
|
||||
ListFormatter& ListFormatter::operator=(const ListFormatter& other) {
|
||||
data = other.data;
|
||||
return *this;
|
||||
}
|
||||
|
||||
void ListFormatter::initializeHash(UErrorCode& errorCode) {
|
||||
if (U_FAILURE(errorCode)) {
|
||||
return;
|
||||
|
@ -57,113 +70,17 @@ void ListFormatter::initializeHash(UErrorCode& errorCode) {
|
|||
listPatternHash->setValueDeleter(uprv_deleteListFormatData);
|
||||
ucln_common_registerCleanup(UCLN_COMMON_LIST_FORMATTER, uprv_listformatter_cleanup);
|
||||
|
||||
addDataToHash("af", "{0} en {1}", "{0}, {1}", "{0}, {1}", "{0} en {1}", errorCode);
|
||||
addDataToHash("am", "{0} \\u12a5\\u1293 {1}", "{0}, {1}", "{0}, {1}", "{0}, \\u12a5\\u1293 {1}", errorCode);
|
||||
addDataToHash("ar", "{0} \\u0648 {1}", "{0}\\u060c {1}", "{0}\\u060c {1}", "{0}\\u060c \\u0648 {1}", errorCode);
|
||||
addDataToHash("bg", "{0} \\u0438 {1}", "{0}, {1}", "{0}, {1}", "{0} \\u0438 {1}", errorCode);
|
||||
addDataToHash("bn", "{0} \\u098f\\u09ac\\u0982 {1}", "{0}, {1}", "{0}, {1}", "{0}, \\u098f\\u09ac\\u0982 {1}", errorCode);
|
||||
addDataToHash("bs", "{0} i {1}", "{0}, {1}", "{0}, {1}", "{0} i {1}", errorCode);
|
||||
addDataToHash("ca", "{0} i {1}", "{0}, {1}", "{0}, {1}", "{0} i {1}", errorCode);
|
||||
addDataToHash("cs", "{0} a {1}", "{0}, {1}", "{0}, {1}", "{0} a {1}", errorCode);
|
||||
addDataToHash("da", "{0} og {1}", "{0}, {1}", "{0}, {1}", "{0} og {1}", errorCode);
|
||||
addDataToHash("de", "{0} und {1}", "{0}, {1}", "{0}, {1}", "{0} und {1}", errorCode);
|
||||
addDataToHash("ee", "{0} kple {1}", "{0}, {1}", "{0}, {1}", "{0}, kple {1}", errorCode);
|
||||
addDataToHash("el", "{0} \\u03ba\\u03b1\\u03b9 {1}", "{0}, {1}", "{0}, {1}", "{0} \\u03ba\\u03b1\\u03b9 {1}", errorCode);
|
||||
addDataToHash("en", "{0} and {1}", "{0}, {1}", "{0}, {1}", "{0}, and {1}", errorCode);
|
||||
addDataToHash("es", "{0} y {1}", "{0}, {1}", "{0}, {1}", "{0} y {1}", errorCode);
|
||||
addDataToHash("et", "{0} ja {1}", "{0}, {1}", "{0}, {1}", "{0} ja {1}", errorCode);
|
||||
addDataToHash("eu", "{0} eta {1}", "{0}, {1}", "{0}, {1}", "{0} eta {1}", errorCode);
|
||||
addDataToHash("fa", "{0} \\u0648 {1}", "{0}\\u060c\\u200f {1}", "{0}\\u060c\\u200f {1}", "{0}\\u060c \\u0648 {1}", errorCode);
|
||||
addDataToHash("fi", "{0} ja {1}", "{0}, {1}", "{0}, {1}", "{0} ja {1}", errorCode);
|
||||
addDataToHash("fil", "{0} at {1}", "{0}, {1}", "{0}, {1}", "{0} at {1}", errorCode);
|
||||
addDataToHash("fo", "{0} og {1}", "{0}, {1}", "{0}, {1}", "{0} og {1}", errorCode);
|
||||
addDataToHash("fr", "{0} et {1}", "{0}, {1}", "{0}, {1}", "{0} et {1}", errorCode);
|
||||
addDataToHash("fur", "{0} e {1}", "{0}, {1}", "{0}, {1}", "{0} e {1}", errorCode);
|
||||
addDataToHash("gd", "{0} agus {1}", "{0}, {1}", "{0}, {1}", "{0}, agus {1}", errorCode);
|
||||
addDataToHash("gl", "{0} e {1}", "{0}, {1}", "{0}, {1}", "{0} e {1}", errorCode);
|
||||
addDataToHash("gsw", "{0} und {1}", "{0}, {1}", "{0}, {1}", "{0} und {1}", errorCode);
|
||||
addDataToHash("gu", "{0} \\u0a85\\u0aa8\\u0ac7 {1}", "{0}, {1}", "{0}, {1}", "{0} \\u0a85\\u0aa8\\u0ac7 {1}", errorCode);
|
||||
addDataToHash("he", "{0} \\u05d5-{1}", "{0}, {1}", "{0}, {1}", "{0} \\u05d5-{1}", errorCode);
|
||||
addDataToHash("hi", "{0} \\u0914\\u0930 {1}", "{0}, {1}", "{0}, {1}", "{0}, \\u0914\\u0930 {1}", errorCode);
|
||||
addDataToHash("hr", "{0} i {1}", "{0}, {1}", "{0}, {1}", "{0} i {1}", errorCode);
|
||||
addDataToHash("hu", "{0} \\u00e9s {1}", "{0}, {1}", "{0}, {1}", "{0} \\u00e9s {1}", errorCode);
|
||||
addDataToHash("id", "{0} dan {1}", "{0}, {1}", "{0}, {1}", "{0}, dan {1}", errorCode);
|
||||
addDataToHash("is", "{0} og {1}", "{0}, {1}", "{0}, {1}", "{0} og {1}", errorCode);
|
||||
addDataToHash("it", "{0} e {1}", "{0}, {1}", "{0}, {1}", "{0}, e {1}", errorCode);
|
||||
addDataToHash("ja", "{0}\\u3001{1}", "{0}\\u3001{1}", "{0}\\u3001{1}", "{0}\\u3001{1}", errorCode);
|
||||
addDataToHash("ka", "{0} \\u10d3\\u10d0 {1}", "{0}, {1}", "{0}, {1}", "{0} \\u10d3\\u10d0 {1}", errorCode);
|
||||
addDataToHash("kea", "{0} y {1}", "{0}, {1}", "{0}, {1}", "{0} y {1}", errorCode);
|
||||
addDataToHash("kl", "{0} aamma {1}", "{0} aamma {1}", "{0}, {1}", "{0}, {1}", errorCode);
|
||||
addDataToHash("kn", "{0} \\u0cae\\u0ca4\\u0ccd\\u0ca4\\u0cc1 {1}", "{0}, {1}", "{0}, {1}",
|
||||
"{0}, \\u0cae\\u0ca4\\u0ccd\\u0ca4\\u0cc1 {1}", errorCode);
|
||||
addDataToHash("ko", "{0} \\ubc0f {1}", "{0}, {1}", "{0}, {1}", "{0} \\ubc0f {1}", errorCode);
|
||||
addDataToHash("ksh", "{0} un {1}", "{0}, {1}", "{0}, {1}", "{0} un {1}", errorCode);
|
||||
addDataToHash("lt", "{0} ir {1}", "{0}, {1}", "{0}, {1}", "{0} ir {1}", errorCode);
|
||||
addDataToHash("lv", "{0} un {1}", "{0}, {1}", "{0}, {1}", "{0} un {1}", errorCode);
|
||||
addDataToHash("ml", "{0} \\u0d15\\u0d42\\u0d1f\\u0d3e\\u0d24\\u0d46 {1}", "{0}, {1}", "{0}, {1}",
|
||||
"{0}, {1} \\u0d0e\\u0d28\\u0d4d\\u0d28\\u0d3f\\u0d35", errorCode);
|
||||
addDataToHash("mr", "{0} \\u0906\\u0923\\u093f {1}", "{0}, {1}", "{0}, {1}", "{0} \\u0906\\u0923\\u093f {1}", errorCode);
|
||||
addDataToHash("ms", "{0} dan {1}", "{0}, {1}", "{0}, {1}", "{0}, dan {1}", errorCode);
|
||||
addDataToHash("nb", "{0} og {1}", "{0}, {1}", "{0}, {1}", "{0} og {1}", errorCode);
|
||||
addDataToHash("nl", "{0} en {1}", "{0}, {1}", "{0}, {1}", "{0} en {1}", errorCode);
|
||||
addDataToHash("nn", "{0} og {1}", "{0}, {1}", "{0}, {1}", "{0} og {1}", errorCode);
|
||||
addDataToHash("pl", "{0} i {1}", "{0}; {1}", "{0}; {1}", "{0} i {1}", errorCode);
|
||||
addDataToHash("pt", "{0} e {1}", "{0}, {1}", "{0}, {1}", "{0} e {1}", errorCode);
|
||||
addDataToHash("ro", "{0} \\u015fi {1}", "{0}, {1}", "{0}, {1}", "{0} \\u015fi {1}", errorCode);
|
||||
addDataToHash("", "{0}, {1}", "{0}, {1}", "{0}, {1}", "{0}, {1}", errorCode); // root
|
||||
addDataToHash("ru", "{0} \\u0438 {1}", "{0}, {1}", "{0}, {1}", "{0} \\u0438 {1}", errorCode);
|
||||
addDataToHash("se", "{0} ja {1}", "{0}, {1}", "{0}, {1}", "{0} ja {1}", errorCode);
|
||||
addDataToHash("sk", "{0} a {1}", "{0}, {1}", "{0}, {1}", "{0} a {1}", errorCode);
|
||||
addDataToHash("sl", "{0} in {1}", "{0}, {1}", "{0}, {1}", "{0} in {1}", errorCode);
|
||||
addDataToHash("sr", "{0} \\u0438 {1}", "{0}, {1}", "{0}, {1}", "{0} \\u0438 {1}", errorCode);
|
||||
addDataToHash("sr_Cyrl", "{0} \\u0438 {1}", "{0}, {1}", "{0}, {1}", "{0} \\u0438 {1}", errorCode);
|
||||
addDataToHash("sr_Latn", "{0} i {1}", "{0}, {1}", "{0}, {1}", "{0} i {1}", errorCode);
|
||||
addDataToHash("sv", "{0} och {1}", "{0}, {1}", "{0}, {1}", "{0} och {1}", errorCode);
|
||||
addDataToHash("sw", "{0} na {1}", "{0}, {1}", "{0}, {1}", "{0}, na {1}", errorCode);
|
||||
addDataToHash("ta", "{0} \\u0bae\\u0bb1\\u0bcd\\u0bb1\\u0bc1\\u0bae\\u0bcd {1}", "{0}, {1}", "{0}, {1}",
|
||||
"{0} \\u0bae\\u0bb1\\u0bcd\\u0bb1\\u0bc1\\u0bae\\u0bcd {1}", errorCode);
|
||||
addDataToHash("te", "{0} \\u0c2e\\u0c30\\u0c3f\\u0c2f\\u0c41 {1}", "{0}, {1}", "{0}, {1}",
|
||||
"{0} \\u0c2e\\u0c30\\u0c3f\\u0c2f\\u0c41 {1}", errorCode);
|
||||
addDataToHash("th", "{0}\\u0e41\\u0e25\\u0e30{1}", "{0} {1}", "{0} {1}", "{0} \\u0e41\\u0e25\\u0e30{1}", errorCode);
|
||||
addDataToHash("tr", "{0} ve {1}", "{0}, {1}", "{0}, {1}", "{0} ve {1}", errorCode);
|
||||
addDataToHash("uk", "{0} \\u0442\\u0430 {1}", "{0}, {1}", "{0}, {1}", "{0} \\u0442\\u0430 {1}", errorCode);
|
||||
addDataToHash("ur", "{0} \\u0627\\u0648\\u0631 {1}", "{0}\\u060c {1}", "{0}\\u060c {1}",
|
||||
"{0}\\u060c \\u0627\\u0648\\u0631 {1}", errorCode);
|
||||
addDataToHash("vi", "{0} v\\u00e0 {1}", "{0}, {1}", "{0}, {1}", "{0} v\\u00e0 {1}", errorCode);
|
||||
addDataToHash("wae", "{0} und {1}", "{0}, {1}", "{0}, {1}", "{0} und {1}", errorCode);
|
||||
addDataToHash("zh", "{0}\\u548c{1}", "{0}\\u3001{1}", "{0}\\u3001{1}", "{0}\\u548c{1}", errorCode);
|
||||
addDataToHash("zu", "I-{0} ne-{1}", "{0}, {1}", "{0}, {1}", "{0}, no-{1}", errorCode);
|
||||
}
|
||||
|
||||
void ListFormatter::addDataToHash(
|
||||
const char* locale,
|
||||
const char* two,
|
||||
const char* start,
|
||||
const char* middle,
|
||||
const char* end,
|
||||
UErrorCode& errorCode) {
|
||||
if (U_FAILURE(errorCode)) {
|
||||
return;
|
||||
}
|
||||
UnicodeString key(locale, -1, US_INV);
|
||||
ListFormatData* value = new ListFormatData(
|
||||
UnicodeString(two, -1, US_INV).unescape(),
|
||||
UnicodeString(start, -1, US_INV).unescape(),
|
||||
UnicodeString(middle, -1, US_INV).unescape(),
|
||||
UnicodeString(end, -1, US_INV).unescape());
|
||||
|
||||
if (value == NULL) {
|
||||
errorCode = U_MEMORY_ALLOCATION_ERROR;
|
||||
return;
|
||||
}
|
||||
listPatternHash->put(key, value, errorCode);
|
||||
}
|
||||
|
||||
const ListFormatData* ListFormatter::getListFormatData(
|
||||
const Locale& locale, UErrorCode& errorCode) {
|
||||
const Locale& locale, const char *style, UErrorCode& errorCode) {
|
||||
if (U_FAILURE(errorCode)) {
|
||||
return NULL;
|
||||
}
|
||||
CharString keyBuffer(locale.getName(), errorCode);
|
||||
keyBuffer.append(':', errorCode).append(style, errorCode);
|
||||
UnicodeString key(keyBuffer.data(), -1, US_INV);
|
||||
ListFormatData* result = NULL;
|
||||
{
|
||||
Mutex m(&listFormatterMutex);
|
||||
if (listPatternHash == NULL) {
|
||||
|
@ -172,10 +89,76 @@ const ListFormatData* ListFormatter::getListFormatData(
|
|||
return NULL;
|
||||
}
|
||||
}
|
||||
result = static_cast<ListFormatData*>(listPatternHash->get(key));
|
||||
}
|
||||
if (result != NULL) {
|
||||
return result;
|
||||
}
|
||||
result = loadListFormatData(locale, style, errorCode);
|
||||
if (U_FAILURE(errorCode)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
UnicodeString key(locale.getName(), -1, US_INV);
|
||||
return static_cast<const ListFormatData*>(listPatternHash->get(key));
|
||||
{
|
||||
Mutex m(&listFormatterMutex);
|
||||
ListFormatData* temp = static_cast<ListFormatData*>(listPatternHash->get(key));
|
||||
if (temp != NULL) {
|
||||
delete result;
|
||||
result = temp;
|
||||
} else {
|
||||
listPatternHash->put(key, result, errorCode);
|
||||
if (U_FAILURE(errorCode)) {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
static ListFormatData* loadListFormatData(
|
||||
const Locale& locale, const char * style, UErrorCode& errorCode) {
|
||||
UResourceBundle* rb = ures_open(NULL, locale.getName(), &errorCode);
|
||||
if (U_FAILURE(errorCode)) {
|
||||
ures_close(rb);
|
||||
return NULL;
|
||||
}
|
||||
rb = ures_getByKeyWithFallback(rb, "listPattern", rb, &errorCode);
|
||||
rb = ures_getByKeyWithFallback(rb, style, rb, &errorCode);
|
||||
|
||||
// TODO(Travis Keep): This is a hack until fallbacks can be added for
|
||||
// listPattern/duration and listPattern/duration-narrow in CLDR.
|
||||
if (errorCode == U_MISSING_RESOURCE_ERROR) {
|
||||
errorCode = U_ZERO_ERROR;
|
||||
rb = ures_getByKeyWithFallback(rb, "standard", rb, &errorCode);
|
||||
}
|
||||
if (U_FAILURE(errorCode)) {
|
||||
ures_close(rb);
|
||||
return NULL;
|
||||
}
|
||||
UnicodeString two, start, middle, end;
|
||||
getStringByKey(rb, "2", two, errorCode);
|
||||
getStringByKey(rb, "start", start, errorCode);
|
||||
getStringByKey(rb, "middle", middle, errorCode);
|
||||
getStringByKey(rb, "end", end, errorCode);
|
||||
ures_close(rb);
|
||||
if (U_FAILURE(errorCode)) {
|
||||
return NULL;
|
||||
}
|
||||
ListFormatData* result = new ListFormatData(two, start, middle, end);
|
||||
if (result == NULL) {
|
||||
errorCode = U_MEMORY_ALLOCATION_ERROR;
|
||||
return NULL;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
static void getStringByKey(const UResourceBundle* rb, const char* key, UnicodeString& result, UErrorCode& errorCode) {
|
||||
int32_t len;
|
||||
const UChar* ustr = ures_getStringByKeyWithFallback(rb, key, &len, &errorCode);
|
||||
if (U_FAILURE(errorCode)) {
|
||||
return;
|
||||
}
|
||||
result.setTo(ustr, len);
|
||||
}
|
||||
|
||||
ListFormatter* ListFormatter::createInstance(UErrorCode& errorCode) {
|
||||
|
@ -184,90 +167,50 @@ ListFormatter* ListFormatter::createInstance(UErrorCode& errorCode) {
|
|||
}
|
||||
|
||||
ListFormatter* ListFormatter::createInstance(const Locale& locale, UErrorCode& errorCode) {
|
||||
Locale tempLocale = locale;
|
||||
for (;;) {
|
||||
const ListFormatData* listFormatData = getListFormatData(tempLocale, errorCode);
|
||||
if (U_FAILURE(errorCode)) {
|
||||
return NULL;
|
||||
}
|
||||
if (listFormatData != NULL) {
|
||||
ListFormatter* p = new ListFormatter(*listFormatData);
|
||||
if (p == NULL) {
|
||||
errorCode = U_MEMORY_ALLOCATION_ERROR;
|
||||
return NULL;
|
||||
}
|
||||
return p;
|
||||
}
|
||||
errorCode = U_ZERO_ERROR;
|
||||
Locale correctLocale;
|
||||
getFallbackLocale(tempLocale, correctLocale, errorCode);
|
||||
if (U_FAILURE(errorCode)) {
|
||||
return NULL;
|
||||
}
|
||||
if (correctLocale.isBogus()) {
|
||||
return createInstance(Locale::getRoot(), errorCode);
|
||||
}
|
||||
tempLocale = correctLocale;
|
||||
}
|
||||
return createInstance(locale, STANDARD_STYLE, errorCode);
|
||||
}
|
||||
|
||||
ListFormatter::ListFormatter(const ListFormatData& listFormatterData) : data(listFormatterData) {
|
||||
ListFormatter* ListFormatter::createInstance(const Locale& locale, const char *style, UErrorCode& errorCode) {
|
||||
Locale tempLocale = locale;
|
||||
const ListFormatData* listFormatData = getListFormatData(tempLocale, style, errorCode);
|
||||
if (U_FAILURE(errorCode)) {
|
||||
return NULL;
|
||||
}
|
||||
ListFormatter* p = new ListFormatter(listFormatData);
|
||||
if (p == NULL) {
|
||||
errorCode = U_MEMORY_ALLOCATION_ERROR;
|
||||
return NULL;
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
|
||||
ListFormatter::ListFormatter(const ListFormatData* listFormatterData) : data(listFormatterData) {
|
||||
}
|
||||
|
||||
ListFormatter::~ListFormatter() {}
|
||||
|
||||
void ListFormatter::getFallbackLocale(const Locale& in, Locale& out, UErrorCode& errorCode) {
|
||||
if (uprv_strcmp(in.getName(), "zh_TW") == 0) {
|
||||
out = Locale::getTraditionalChinese();
|
||||
} else {
|
||||
const char* localeString = in.getName();
|
||||
const char* extStart = locale_getKeywordsStart(localeString);
|
||||
if (extStart == NULL) {
|
||||
extStart = uprv_strchr(localeString, 0);
|
||||
}
|
||||
const char* last = extStart;
|
||||
|
||||
// TODO: Check whether uloc_getParent() will work here.
|
||||
while (last > localeString && *(last - 1) != '_') {
|
||||
--last;
|
||||
}
|
||||
|
||||
// Truncate empty segment.
|
||||
while (last > localeString) {
|
||||
if (*(last-1) != '_') {
|
||||
break;
|
||||
}
|
||||
--last;
|
||||
}
|
||||
|
||||
size_t localePortionLen = last - localeString;
|
||||
CharString fullLocale;
|
||||
fullLocale.append(localeString, localePortionLen, errorCode).append(extStart, errorCode);
|
||||
|
||||
if (U_FAILURE(errorCode)) {
|
||||
return;
|
||||
}
|
||||
out = Locale(fullLocale.data());
|
||||
}
|
||||
}
|
||||
|
||||
UnicodeString& ListFormatter::format(const UnicodeString items[], int32_t nItems,
|
||||
UnicodeString& appendTo, UErrorCode& errorCode) const {
|
||||
if (U_FAILURE(errorCode)) {
|
||||
return appendTo;
|
||||
}
|
||||
if (data == NULL) {
|
||||
errorCode = U_INVALID_STATE_ERROR;
|
||||
return appendTo;
|
||||
}
|
||||
|
||||
if (nItems > 0) {
|
||||
UnicodeString newString = items[0];
|
||||
if (nItems == 2) {
|
||||
addNewString(data.twoPattern, newString, items[1], errorCode);
|
||||
addNewString(data->twoPattern, newString, items[1], errorCode);
|
||||
} else if (nItems > 2) {
|
||||
addNewString(data.startPattern, newString, items[1], errorCode);
|
||||
int i;
|
||||
addNewString(data->startPattern, newString, items[1], errorCode);
|
||||
int32_t i;
|
||||
for (i = 2; i < nItems - 1; ++i) {
|
||||
addNewString(data.middlePattern, newString, items[i], errorCode);
|
||||
addNewString(data->middlePattern, newString, items[i], errorCode);
|
||||
}
|
||||
addNewString(data.endPattern, newString, items[nItems - 1], errorCode);
|
||||
addNewString(data->endPattern, newString, items[nItems - 1], errorCode);
|
||||
}
|
||||
if (U_SUCCESS(errorCode)) {
|
||||
appendTo += newString;
|
||||
|
@ -320,6 +263,4 @@ void ListFormatter::addNewString(const UnicodeString& pat, UnicodeString& origin
|
|||
originalString = result;
|
||||
}
|
||||
|
||||
UOBJECT_DEFINE_NO_RTTI_IMPLEMENTATION(ListFormatter)
|
||||
|
||||
U_NAMESPACE_END
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
*******************************************************************************
|
||||
*
|
||||
* Copyright (C) 1997-2011, International Business Machines
|
||||
* Copyright (C) 1997-2013, International Business Machines
|
||||
* Corporation and others. All Rights Reserved.
|
||||
*
|
||||
*******************************************************************************
|
||||
|
@ -23,13 +23,19 @@
|
|||
#include "unicode/ures.h"
|
||||
#include "cmemory.h"
|
||||
#include "ucln_cmn.h"
|
||||
#include "uassert.h"
|
||||
#include "umutex.h"
|
||||
#include "uresimp.h"
|
||||
|
||||
// C++ API ----------------------------------------------------------------- ***
|
||||
|
||||
U_NAMESPACE_BEGIN
|
||||
|
||||
static icu::Locale* availableLocaleList = NULL;
|
||||
static int32_t availableLocaleListCount;
|
||||
static icu::UInitOnce gInitOnce = U_INITONCE_INITIALIZER;
|
||||
|
||||
U_NAMESPACE_END
|
||||
|
||||
U_CDECL_BEGIN
|
||||
|
||||
|
@ -42,6 +48,7 @@ static UBool U_CALLCONV locale_available_cleanup(void)
|
|||
availableLocaleList = NULL;
|
||||
}
|
||||
availableLocaleListCount = 0;
|
||||
gInitOnce.reset();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -50,40 +57,29 @@ U_CDECL_END
|
|||
|
||||
U_NAMESPACE_BEGIN
|
||||
|
||||
void U_CALLCONV locale_available_init() {
|
||||
// This function is a friend of class Locale.
|
||||
// This function is only invoked via umtx_initOnce().
|
||||
|
||||
// for now, there is a hardcoded list, so just walk through that list and set it up.
|
||||
// Note: this function is a friend of class Locale.
|
||||
availableLocaleListCount = uloc_countAvailable();
|
||||
if(availableLocaleListCount) {
|
||||
availableLocaleList = new Locale[availableLocaleListCount];
|
||||
}
|
||||
if (availableLocaleList == NULL) {
|
||||
availableLocaleListCount= 0;
|
||||
}
|
||||
for (int32_t locCount=availableLocaleListCount-1; locCount>=0; --locCount) {
|
||||
availableLocaleList[locCount].setFromPOSIXID(uloc_getAvailable(locCount));
|
||||
}
|
||||
ucln_common_registerCleanup(UCLN_COMMON_LOCALE_AVAILABLE, locale_available_cleanup);
|
||||
}
|
||||
|
||||
const Locale* U_EXPORT2
|
||||
Locale::getAvailableLocales(int32_t& count)
|
||||
{
|
||||
// for now, there is a hardcoded list, so just walk through that list and set it up.
|
||||
UBool needInit;
|
||||
UMTX_CHECK(NULL, availableLocaleList == NULL, needInit);
|
||||
|
||||
if (needInit) {
|
||||
int32_t locCount = uloc_countAvailable();
|
||||
Locale *newLocaleList = 0;
|
||||
if(locCount) {
|
||||
newLocaleList = new Locale[locCount];
|
||||
}
|
||||
if (newLocaleList == NULL) {
|
||||
count = 0;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
count = locCount;
|
||||
|
||||
while(--locCount >= 0) {
|
||||
newLocaleList[locCount].setFromPOSIXID(uloc_getAvailable(locCount));
|
||||
}
|
||||
|
||||
umtx_lock(NULL);
|
||||
if(availableLocaleList == 0) {
|
||||
availableLocaleListCount = count;
|
||||
availableLocaleList = newLocaleList;
|
||||
newLocaleList = NULL;
|
||||
ucln_common_registerCleanup(UCLN_COMMON_LOCALE_AVAILABLE, locale_available_cleanup);
|
||||
}
|
||||
umtx_unlock(NULL);
|
||||
delete []newLocaleList;
|
||||
}
|
||||
umtx_initOnce(gInitOnce, &locale_available_init);
|
||||
count = availableLocaleListCount;
|
||||
return availableLocaleList;
|
||||
}
|
||||
|
@ -104,6 +100,7 @@ static const char _kIndexTag[] = "InstalledLocales";
|
|||
|
||||
static char** _installedLocales = NULL;
|
||||
static int32_t _installedLocalesCount = 0;
|
||||
static icu::UInitOnce _installedLocalesInitOnce;
|
||||
|
||||
/* ### Get available **************************************************/
|
||||
|
||||
|
@ -115,57 +112,51 @@ static UBool U_CALLCONV uloc_cleanup(void) {
|
|||
_installedLocales = NULL;
|
||||
|
||||
_installedLocalesCount = 0;
|
||||
_installedLocalesInitOnce.reset();
|
||||
|
||||
uprv_free(temp);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// Load Installed Locales. This function will be called exactly once
|
||||
// via the initOnce mechanism.
|
||||
|
||||
static void U_CALLCONV loadInstalledLocales() {
|
||||
UResourceBundle *indexLocale = NULL;
|
||||
UResourceBundle installed;
|
||||
UErrorCode status = U_ZERO_ERROR;
|
||||
int32_t i = 0;
|
||||
int32_t localeCount;
|
||||
|
||||
U_ASSERT(_installedLocales == NULL);
|
||||
U_ASSERT(_installedLocalesCount == 0);
|
||||
|
||||
_installedLocalesCount = 0;
|
||||
ures_initStackObject(&installed);
|
||||
indexLocale = ures_openDirect(NULL, _kIndexLocaleName, &status);
|
||||
ures_getByKey(indexLocale, _kIndexTag, &installed, &status);
|
||||
|
||||
if(U_SUCCESS(status)) {
|
||||
localeCount = ures_getSize(&installed);
|
||||
_installedLocales = (char **) uprv_malloc(sizeof(char*) * (localeCount+1));
|
||||
if (_installedLocales != NULL) {
|
||||
ures_resetIterator(&installed);
|
||||
while(ures_hasNext(&installed)) {
|
||||
ures_getNextString(&installed, NULL, (const char **)&_installedLocales[i++], &status);
|
||||
}
|
||||
_installedLocales[i] = NULL;
|
||||
_installedLocalesCount = localeCount;
|
||||
ucln_common_registerCleanup(UCLN_COMMON_ULOC, uloc_cleanup);
|
||||
}
|
||||
}
|
||||
ures_close(&installed);
|
||||
ures_close(indexLocale);
|
||||
}
|
||||
|
||||
static void _load_installedLocales()
|
||||
{
|
||||
UBool localesLoaded;
|
||||
|
||||
UMTX_CHECK(NULL, _installedLocales != NULL, localesLoaded);
|
||||
|
||||
if (localesLoaded == FALSE) {
|
||||
UResourceBundle *indexLocale = NULL;
|
||||
UResourceBundle installed;
|
||||
UErrorCode status = U_ZERO_ERROR;
|
||||
char ** temp;
|
||||
int32_t i = 0;
|
||||
int32_t localeCount;
|
||||
|
||||
ures_initStackObject(&installed);
|
||||
indexLocale = ures_openDirect(NULL, _kIndexLocaleName, &status);
|
||||
ures_getByKey(indexLocale, _kIndexTag, &installed, &status);
|
||||
|
||||
if(U_SUCCESS(status)) {
|
||||
localeCount = ures_getSize(&installed);
|
||||
temp = (char **) uprv_malloc(sizeof(char*) * (localeCount+1));
|
||||
/* Check for null pointer */
|
||||
if (temp != NULL) {
|
||||
ures_resetIterator(&installed);
|
||||
while(ures_hasNext(&installed)) {
|
||||
ures_getNextString(&installed, NULL, (const char **)&temp[i++], &status);
|
||||
}
|
||||
temp[i] = NULL;
|
||||
|
||||
umtx_lock(NULL);
|
||||
if (_installedLocales == NULL)
|
||||
{
|
||||
_installedLocalesCount = localeCount;
|
||||
_installedLocales = temp;
|
||||
temp = NULL;
|
||||
ucln_common_registerCleanup(UCLN_COMMON_ULOC, uloc_cleanup);
|
||||
}
|
||||
umtx_unlock(NULL);
|
||||
|
||||
uprv_free(temp);
|
||||
}
|
||||
}
|
||||
ures_close(&installed);
|
||||
ures_close(indexLocale);
|
||||
}
|
||||
umtx_initOnce(_installedLocalesInitOnce, &loadInstalledLocales);
|
||||
}
|
||||
|
||||
U_CAPI const char* U_EXPORT2
|
||||
|
@ -185,3 +176,4 @@ uloc_countAvailable()
|
|||
_load_installedLocales();
|
||||
return _installedLocalesCount;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
*******************************************************************************
|
||||
*
|
||||
* Copyright (C) 1997-2012, International Business Machines
|
||||
* Copyright (C) 1997-2013, International Business Machines
|
||||
* Corporation and others. All Rights Reserved.
|
||||
*
|
||||
*******************************************************************************
|
||||
|
@ -465,8 +465,7 @@ uloc_getDisplayName(const char *locale,
|
|||
UChar *dest, int32_t destCapacity,
|
||||
UErrorCode *pErrorCode)
|
||||
{
|
||||
static const UChar defaultSeparator[3] = { 0x002c, 0x0020, 0x0000 }; /* comma + space */
|
||||
static const int32_t defaultSepLen = 2;
|
||||
static const UChar defaultSeparator[9] = { 0x007b, 0x0030, 0x007d, 0x002c, 0x0020, 0x007b, 0x0031, 0x007d, 0x0000 }; /* "{0}, {1}" */
|
||||
static const UChar sub0[4] = { 0x007b, 0x0030, 0x007d , 0x0000 } ; /* {0} */
|
||||
static const UChar sub1[4] = { 0x007b, 0x0031, 0x007d , 0x0000 } ; /* {1} */
|
||||
static const int32_t subLen = 3;
|
||||
|
@ -484,6 +483,11 @@ uloc_getDisplayName(const char *locale,
|
|||
const UChar *pattern;
|
||||
int32_t patLen = 0;
|
||||
int32_t sub0Pos, sub1Pos;
|
||||
|
||||
UChar formatOpenParen = 0x0028; // (
|
||||
UChar formatReplaceOpenParen = 0x005B; // [
|
||||
UChar formatCloseParen = 0x0029; // )
|
||||
UChar formatReplaceCloseParen = 0x005D; // ]
|
||||
|
||||
UBool haveLang = TRUE; /* assume true, set false if we find we don't have
|
||||
a lang component in the locale */
|
||||
|
@ -518,7 +522,25 @@ uloc_getDisplayName(const char *locale,
|
|||
/* If we couldn't find any data, then use the defaults */
|
||||
if(sepLen == 0) {
|
||||
separator = defaultSeparator;
|
||||
sepLen = defaultSepLen;
|
||||
}
|
||||
/* #10244: Even though separator is now a pattern, it is awkward to handle it as such
|
||||
* here since we are trying to build the display string in place in the dest buffer,
|
||||
* and to handle it as a pattern would entail having separate storage for the
|
||||
* substrings that need to be combined (the first of which may be the result of
|
||||
* previous such combinations). So for now we continue to treat the portion between
|
||||
* {0} and {1} as a string to be appended when joining substrings, ignoring anything
|
||||
* that is before {0} or after {1} (no existing separator pattern has any such thing).
|
||||
* This is similar to how pattern is handled below.
|
||||
*/
|
||||
{
|
||||
UChar *p0=u_strstr(separator, sub0);
|
||||
UChar *p1=u_strstr(separator, sub1);
|
||||
if (p0==NULL || p1==NULL || p1<p0) {
|
||||
*pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
|
||||
return 0;
|
||||
}
|
||||
separator = (const UChar *)p0 + subLen;
|
||||
sepLen = p1 - separator;
|
||||
}
|
||||
|
||||
if(patLen==0 || (patLen==defaultPatLen && !u_strncmp(pattern, defaultPattern, patLen))) {
|
||||
|
@ -526,6 +548,7 @@ uloc_getDisplayName(const char *locale,
|
|||
patLen=defaultPatLen;
|
||||
sub0Pos=defaultSub0Pos;
|
||||
sub1Pos=defaultSub1Pos;
|
||||
// use default formatOpenParen etc. set above
|
||||
} else { /* non-default pattern */
|
||||
UChar *p0=u_strstr(pattern, sub0);
|
||||
UChar *p1=u_strstr(pattern, sub1);
|
||||
|
@ -539,6 +562,12 @@ uloc_getDisplayName(const char *locale,
|
|||
int32_t t=sub0Pos; sub0Pos=sub1Pos; sub1Pos=t;
|
||||
langi=1;
|
||||
}
|
||||
if (u_strchr(pattern, 0xFF08) != NULL) {
|
||||
formatOpenParen = 0xFF08; // fullwidth (
|
||||
formatReplaceOpenParen = 0xFF3B; // fullwidth [
|
||||
formatCloseParen = 0xFF09; // fullwidth )
|
||||
formatReplaceCloseParen = 0xFF3D; // fullwidth ]
|
||||
}
|
||||
}
|
||||
|
||||
/* We loop here because there is one case in which after the first pass we could need to
|
||||
|
@ -660,7 +689,14 @@ uloc_getDisplayName(const char *locale,
|
|||
if (len>0) {
|
||||
/* we addeed a component, so add separator and write it if there's room. */
|
||||
if(len+sepLen<=cap) {
|
||||
p+=len;
|
||||
const UChar * plimit = p + len;
|
||||
for (; p < plimit; p++) {
|
||||
if (*p == formatOpenParen) {
|
||||
*p = formatReplaceOpenParen;
|
||||
} else if (*p == formatCloseParen) {
|
||||
*p = formatReplaceCloseParen;
|
||||
}
|
||||
}
|
||||
for(int32_t i=0;i<sepLen;++i) {
|
||||
*p++=separator[i];
|
||||
}
|
||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче