diff options
author | acm <acm@FreeBSD.org> | 2013-10-01 07:38:45 +0800 |
---|---|---|
committer | acm <acm@FreeBSD.org> | 2013-10-01 07:38:45 +0800 |
commit | ce90469a7fadb0ecd4e538d83e9877e93d08bc24 (patch) | |
tree | 714f41de706d93fe420650e6f96e580795d77a6f /databases | |
parent | 2e076634f84ac499e1fe9fde6bbc30548e25e4ce (diff) | |
download | freebsd-ports-gnome-ce90469a7fadb0ecd4e538d83e9877e93d08bc24.tar.gz freebsd-ports-gnome-ce90469a7fadb0ecd4e538d83e9877e93d08bc24.tar.zst freebsd-ports-gnome-ce90469a7fadb0ecd4e538d83e9877e93d08bc24.zip |
- Fix issues with newest version of ICU
- Fix fbintl.conf installation
- Bump PORTREVISION
- Few other modifications
Diffstat (limited to 'databases')
-rw-r--r-- | databases/firebird25-server/Makefile | 8 | ||||
-rw-r--r-- | databases/firebird25-server/files/firebird.in | 2 | ||||
-rw-r--r-- | databases/firebird25-server/files/patch-src-jrd_unicode_util.cpp | 290 | ||||
-rw-r--r-- | databases/firebird25-server/pkg-plist | 4 |
4 files changed, 297 insertions, 7 deletions
diff --git a/databases/firebird25-server/Makefile b/databases/firebird25-server/Makefile index f055f7950653..65d3ec3e603a 100644 --- a/databases/firebird25-server/Makefile +++ b/databases/firebird25-server/Makefile @@ -3,7 +3,7 @@ PORTNAME= firebird PORTVERSION= 2.5.2 -PORTREVISION?= 1 +PORTREVISION?= 2 CATEGORIES?= databases MASTER_SITES= SF/${PORTNAME}/${PORTNAME}/${PORTVERSION:S/.0//}-Release/ PKGNAMESUFFIX?= -server @@ -30,7 +30,7 @@ CONFIGURE_ARGS= --with-system-editline \ --with-fbconf=${CONFDIR} \ --with-fbglock=${LOCALSTATEDIR} \ --with-fbhelp=${LOCALSTATEDIR}/help \ - --with-fbintl=${CONFDIR}/intl \ + --with-fbintl=${LIBEXECDIR}/intl \ --with-fblog=${LOCALSTATEDIR} \ --with-fbmsg=${DATADIR} \ --with-fbplugins=${LIBEXECDIR}/plugins \ @@ -157,7 +157,6 @@ do-install: .if !exists(${CONFDIR}/aliases.conf) ${INSTALL_DATA} ${WRKSRC}/gen/install/misc/aliases.conf ${CONFDIR}/aliases.conf .endif - ${INSTALL_DATA} ${WRKSRC}/gen/install/misc/fbintl.conf ${CONFDIR}/fbintl.conf ${INSTALL_DATA} ${WRKSRC}/gen/install/misc/fbtrace.conf ${CONFDIR}/fbtrace.conf ${MKDIR} ${LIBEXECDIR}/udf ${LOCALSTATEDIR}/help ${LIBEXECDIR}/intl \ @@ -165,6 +164,7 @@ do-install: ${CHOWN} -R firebird:firebird ${LOCALSTATEDIR} + ${INSTALL_DATA} ${WRKSRC}/gen/install/misc/fbintl.conf ${LIBEXECDIR}/intl/fbintl.conf ${INSTALL_FB} -m 0555 ${UDF_SO:S!^!${WRKSRC}/gen/firebird/UDF/!} ${LIBEXECDIR}/udf ${INSTALL_FB} -m 0444 ${UDF_SQL:S!^!${WRKSRC}/!} ${LIBEXECDIR}/udf ${INSTALL_FB} -m 0555 ${WRKSRC}/gen/firebird/plugins/libfbtrace.so ${LIBEXECDIR}/plugins @@ -176,7 +176,7 @@ do-install: ${INSTALL_FB} -m 0440 ${WRKSRC}/gen/firebird/help/help.fdb ${LOCALSTATEDIR}/help - ${INSTALL_FB} -m 0555 ${WRKSRC}/gen/firebird/intl/libfbintl.so ${LIBEXECDIR}/intl/fbintl + ${INSTALL_FB} -m 0555 ${WRKSRC}/gen/firebird/intl/libfbintl.so ${LIBEXECDIR}/intl/fbintl.so .else # defined CLIENT_ONLY ${INSTALL_PROGRAM} ${CLIENT_BIN:S!^!${WRKSRC}/gen/firebird/bin/!} ${PREFIX}/bin diff --git a/databases/firebird25-server/files/firebird.in b/databases/firebird25-server/files/firebird.in index a40239132cd4..0d01153410b9 100644 --- a/databases/firebird25-server/files/firebird.in +++ b/databases/firebird25-server/files/firebird.in @@ -24,7 +24,7 @@ rcvar=firebird_enable load_rc_config $name firebird_enable=${firebird_enable:-"NO"} -firebird_flags=${firebird_flags:-"-daemon"} +firebird_flags=${firebird_flags:-"-daemon -pidname ${name}.pid"} firebird_pidfile=${firebird_pidfile:-"/var/run/${name}.pid"} firebird_user=firebird diff --git a/databases/firebird25-server/files/patch-src-jrd_unicode_util.cpp b/databases/firebird25-server/files/patch-src-jrd_unicode_util.cpp new file mode 100644 index 000000000000..3c1598b2c04b --- /dev/null +++ b/databases/firebird25-server/files/patch-src-jrd_unicode_util.cpp @@ -0,0 +1,290 @@ +--- src/jrd/unicode_util.cpp 2013-03-19 03:38:19.000000000 -0500 ++++ src/jrd/unicode_util.cpp 2013-09-05 08:59:56.000000000 -0500 +@@ -42,6 +42,9 @@ + #include "unicode/ucnv.h" + #include "unicode/ucol.h" + ++// The next major ICU version after 4.8 is 49. ++#define ICU_NEW_VERSION_MEANING 49 ++ + + using namespace Firebird; + +@@ -49,8 +52,16 @@ + namespace Jrd { + + ++#if U_ICU_VERSION_MAJOR_NUM >= ICU_NEW_VERSION_MEANING ++const char* const UnicodeUtil::DEFAULT_ICU_VERSION = STRINGIZE(U_ICU_VERSION_MAJOR_NUM); ++#else + const char* const UnicodeUtil::DEFAULT_ICU_VERSION = + STRINGIZE(U_ICU_VERSION_MAJOR_NUM)"."STRINGIZE(U_ICU_VERSION_MINOR_NUM); ++#endif ++ ++ ++static void formatFilename(PathName& filename, const char* templateName, ++ int majorVersion, int minorVersion); + + + // encapsulate ICU collations libraries +@@ -65,12 +76,16 @@ + : majorVersion(aMajorVersion), + minorVersion(aMinorVersion), + inModule(NULL), +- ucModule(NULL) ++ ucModule(NULL), ++ ciAiTransCache(*getDefaultMemoryPool()) + { + } + + ~ICU() + { ++ while (ciAiTransCache.hasData()) ++ utransClose(ciAiTransCache.pop()); ++ + delete ucModule; + delete inModule; + } +@@ -79,6 +94,11 @@ + { + string symbol; + ++ symbol.printf("%s_%d", name, majorVersion); ++ module->findSymbol(symbol, ptr); ++ if (ptr) ++ return; ++ + symbol.printf("%s_%d_%d", name, majorVersion, minorVersion); + module->findSymbol(symbol, ptr); + if (ptr) +@@ -86,6 +106,40 @@ + + symbol.printf("%s_%d%d", name, majorVersion, minorVersion); + module->findSymbol(symbol, ptr); ++ if (ptr) ++ return; ++ ++ symbol.printf("%s", name); ++ module->findSymbol(symbol, ptr); ++ } ++ ++ UTransliterator* getCiAiTransliterator() ++ { ++ ciAiTransCacheMutex.enter(); ++ UTransliterator* ret; ++ ++ if (!ciAiTransCache.isEmpty()) ++ { ++ ret = ciAiTransCache.pop(); ++ ciAiTransCacheMutex.leave(); ++ } ++ else ++ { ++ ciAiTransCacheMutex.leave(); ++ ++ UErrorCode errorCode = U_ZERO_ERROR; ++ // Fix for CORE-4136. Was "Any-Upper; NFD; [:Nonspacing Mark:] Remove; NFC". ++ ret = utransOpen("NFD; [:Nonspacing Mark:] Remove; NFC", ++ UTRANS_FORWARD, NULL, 0, NULL, &errorCode); ++ } ++ ++ return ret; ++ } ++ ++ void releaseCiAiTransliterator(UTransliterator* trans) ++ { ++ MutexLockGuard guard(ciAiTransCacheMutex); ++ ciAiTransCache.push(trans); + } + + int majorVersion; +@@ -93,6 +147,8 @@ + ModuleLoader::Module* inModule; + ModuleLoader::Module* ucModule; + UVersionInfo collVersion; ++ Mutex ciAiTransCacheMutex; ++ Array<UTransliterator*> ciAiTransCache; + + void (U_EXPORT2 *uInit)(UErrorCode* status); + void (U_EXPORT2 *uVersionToString)(UVersionInfo versionArray, char* versionString); +@@ -157,14 +213,25 @@ + RWLock lock; + }; + +-namespace { +- GlobalPtr<UnicodeUtil::ICUModules> icuModules; +-} ++static GlobalPtr<UnicodeUtil::ICUModules> icuModules; + + + static const char* const COLL_30_VERSION = "41.128.4.4"; // ICU 3.0 collator version + + ++static void formatFilename(PathName& filename, const char* templateName, ++ int majorVersion, int minorVersion) ++{ ++ string s; ++ if (majorVersion >= ICU_NEW_VERSION_MEANING) ++ s.printf("%d", majorVersion); ++ else ++ s.printf("%d%d", majorVersion, minorVersion); ++ ++ filename.printf(templateName, s.c_str()); ++} ++ ++ + static void getVersions(const string& configInfo, ObjectsArray<string>& versions) + { + charset cs; +@@ -758,17 +825,17 @@ + const Firebird::string& configInfo) + { + #if defined(WIN_NT) +- const char* const inTemplate = "icuin%d%d.dll"; +- const char* const ucTemplate = "icuuc%d%d.dll"; ++ const char* const inTemplate = "icuin%s.dll"; ++ const char* const ucTemplate = "icuuc%s.dll"; + #elif defined(DARWIN) + const char* const inTemplate = "/Library/Frameworks/Firebird.framework/Versions/A/Libraries/libicui18n.dylib"; + const char* const ucTemplate = "/Library/Frameworks/Firebird.framework/versions/A/Libraries/libicuuc.dylib"; + #elif defined(HPUX) +- const char* const inTemplate = "libicui18n.sl.%d%d"; +- const char* const ucTemplate = "libicuuc.sl.%d%d"; ++ const char* const inTemplate = "libicui18n.sl.%s"; ++ const char* const ucTemplate = "libicuuc.sl.%s"; + #else +- const char* const inTemplate = "libicui18n.so.%d%d"; +- const char* const ucTemplate = "libicuuc.so.%d%d"; ++ const char* const inTemplate = "libicui18n.so.%s"; ++ const char* const ucTemplate = "libicuuc.so.%s"; + #endif + + ObjectsArray<string> versions; +@@ -776,24 +843,28 @@ + + string version = icuVersion.isEmpty() ? versions[0] : icuVersion; + if (version == "default") +- { +- version.printf("%d.%d", U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM); +- } ++ version = DEFAULT_ICU_VERSION; + + for (ObjectsArray<string>::const_iterator i(versions.begin()); i != versions.end(); ++i) + { + int majorVersion, minorVersion; ++ int n = sscanf((*i == "default" ? version : *i).c_str(), "%d.%d", ++ &majorVersion, &minorVersion); + +- if (*i == "default") +- { +- majorVersion = U_ICU_VERSION_MAJOR_NUM; +- minorVersion = U_ICU_VERSION_MINOR_NUM; +- } +- else if (sscanf(i->c_str(), "%d.%d", &majorVersion, &minorVersion) != 2) ++ if (n == 1) ++ minorVersion = 0; ++ else if (n != 2) + continue; + + string configVersion; +- configVersion.printf("%d.%d", majorVersion, minorVersion); ++ ++ if (majorVersion >= ICU_NEW_VERSION_MEANING) ++ { ++ minorVersion = 0; ++ configVersion.printf("%d", majorVersion); ++ } ++ else ++ configVersion.printf("%d.%d", majorVersion, minorVersion); + + if (version != configVersion) + continue; +@@ -805,7 +876,7 @@ + return icu; + + PathName filename; +- filename.printf(ucTemplate, majorVersion, minorVersion); ++ formatFilename(filename, ucTemplate, majorVersion, minorVersion); + + icu = FB_NEW(*getDefaultMemoryPool()) ICU(majorVersion, minorVersion); + +@@ -822,7 +893,7 @@ + continue; + } + +- filename.printf(inTemplate, majorVersion, minorVersion); ++ formatFilename(filename, inTemplate, majorVersion, minorVersion); + + icu->inModule = ModuleLoader::loadModule(filename); + if (!icu->inModule) +@@ -1208,44 +1279,40 @@ + ULONG UnicodeUtil::Utf16Collation::canonical(ULONG srcLen, const USHORT* src, ULONG dstLen, ULONG* dst, + const ULONG* exceptions) + { ++ fb_assert(srcLen % sizeof(*src) == 0); ++ + HalfStaticArray<USHORT, BUFFER_SMALL / 2> upperStr; + +- if ((attributes & (TEXTTYPE_ATTR_CASE_INSENSITIVE | TEXTTYPE_ATTR_ACCENT_INSENSITIVE)) == +- (TEXTTYPE_ATTR_CASE_INSENSITIVE | TEXTTYPE_ATTR_ACCENT_INSENSITIVE)) ++ if (attributes & TEXTTYPE_ATTR_CASE_INSENSITIVE) + { +- fb_assert(srcLen % sizeof(*src) == 0); +- +- memcpy(upperStr.getBuffer(srcLen / sizeof(USHORT)), src, srcLen); +- +- UErrorCode errorCode = U_ZERO_ERROR; +- UTransliterator* trans = icu->utransOpen("Any-Upper; NFD; [:Nonspacing Mark:] Remove; NFC", +- UTRANS_FORWARD, NULL, 0, NULL, &errorCode); ++ srcLen = utf16UpperCase(srcLen, src, srcLen, ++ upperStr.getBuffer(srcLen / sizeof(USHORT)), NULL); ++ src = upperStr.begin(); + +- if (errorCode <= 0) ++ if (attributes & TEXTTYPE_ATTR_ACCENT_INSENSITIVE) + { +- const int32_t capacity = upperStr.getCount(); +- int32_t len = srcLen / sizeof(USHORT); +- int32_t limit = len; +- +- icu->utransTransUChars(trans, reinterpret_cast<UChar*>(upperStr.begin()), +- &len, capacity, 0, &limit, &errorCode); +- icu->utransClose(trans); ++ UTransliterator* trans = icu->getCiAiTransliterator(); + +- len *= sizeof(USHORT); +- if (ULONG(len) > dstLen) +- len = INTL_BAD_STR_LENGTH; ++ if (trans) ++ { ++ const int32_t capacity = upperStr.getCount(); ++ int32_t len = srcLen / sizeof(USHORT); ++ int32_t limit = len; ++ ++ UErrorCode errorCode = U_ZERO_ERROR; ++ icu->utransTransUChars(trans, reinterpret_cast<UChar*>(upperStr.begin()), ++ &len, capacity, 0, &limit, &errorCode); ++ icu->releaseCiAiTransliterator(trans); ++ ++ len *= sizeof(USHORT); ++ if (ULONG(len) > dstLen) ++ len = INTL_BAD_STR_LENGTH; + +- srcLen = len; +- src = upperStr.begin(); ++ srcLen = len; ++ } ++ else ++ return INTL_BAD_STR_LENGTH; + } +- else +- return INTL_BAD_STR_LENGTH; +- } +- else if (attributes & TEXTTYPE_ATTR_CASE_INSENSITIVE) +- { +- srcLen = utf16UpperCase(srcLen, src, +- srcLen, upperStr.getBuffer(srcLen / sizeof(USHORT)), exceptions); +- src = upperStr.begin(); + } + + // convert UTF-16 to UTF-32 diff --git a/databases/firebird25-server/pkg-plist b/databases/firebird25-server/pkg-plist index 5d0a89dd8e80..ac1d8cf27e9c 100644 --- a/databases/firebird25-server/pkg-plist +++ b/databases/firebird25-server/pkg-plist @@ -17,11 +17,11 @@ libexec/firebird/udf/fbudf.so libexec/firebird/udf/ib_udf2.sql libexec/firebird/udf/fbudf.sql libexec/firebird/plugins/libfbtrace.so -libexec/firebird/intl/fbintl +libexec/firebird/intl/fbintl.so +libexec/firebird/intl/fbintl.conf @unexec (cmp -s %D/%%CONFDIR%%/aliases.conf %D/%%CONFDIR%%/aliases.conf.sample && rm -f %D/%%CONFDIR%%/aliases.conf) || true %%CONFDIR%%/aliases.conf.sample @exec [ -f %B/aliases.conf ] || cp %B/%f %B/aliases.conf -%%CONFDIR%%/fbintl.conf %%CONFDIR%%/fbtrace.conf @dirrmtry %%CONFDIR%% @dirrm libexec/firebird/intl |