aboutsummaryrefslogtreecommitdiffstats
path: root/databases
diff options
context:
space:
mode:
authoracm <acm@FreeBSD.org>2013-10-01 07:38:45 +0800
committeracm <acm@FreeBSD.org>2013-10-01 07:38:45 +0800
commitce90469a7fadb0ecd4e538d83e9877e93d08bc24 (patch)
tree714f41de706d93fe420650e6f96e580795d77a6f /databases
parent2e076634f84ac499e1fe9fde6bbc30548e25e4ce (diff)
downloadfreebsd-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/Makefile8
-rw-r--r--databases/firebird25-server/files/firebird.in2
-rw-r--r--databases/firebird25-server/files/patch-src-jrd_unicode_util.cpp290
-rw-r--r--databases/firebird25-server/pkg-plist4
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