Changeset: a7bb2e65ca16 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a7bb2e65ca16
Added Files:
debian/libmonetdb5-server-cfitsio.install
Modified Files:
MonetDB.spec
buildtools/ChangeLog.Aug2018
debian/control
debian/rules
monetdb5/modules/mal/pcre.c
Branch: default
Log Message:
Merge with Aug2018 branch.
diffs (truncated from 494 to 300 lines):
diff --git a/MonetDB.spec b/MonetDB.spec
--- a/MonetDB.spec
+++ b/MonetDB.spec
@@ -87,8 +87,8 @@
%endif
%if %{fedpkgs}
-# By default, do not create the MonetDB-cfitsio package.
-%bcond_with fits
+# By default, create the MonetDB-cfitsio package.
+%bcond_without fits
%endif
%{!?__python2: %global __python2 %__python}
diff --git a/buildtools/ChangeLog.Aug2018 b/buildtools/ChangeLog.Aug2018
--- a/buildtools/ChangeLog.Aug2018
+++ b/buildtools/ChangeLog.Aug2018
@@ -1,3 +1,7 @@
# ChangeLog file for buildtools
# This file is updated with Maddlog
+* Tue Aug 28 2018 Sjoerd Mullender <[email protected]>
+- Build the MonetDB-cfitsio RPM and libmonetdb5-server-cfitsio
+ Debian/Ubuntu package.
+
diff --git a/debian/control b/debian/control
--- a/debian/control
+++ b/debian/control
@@ -9,7 +9,8 @@ Build-Depends: debhelper (>= 5), autotoo
libbam-dev, libbz2-dev, libcurl4-gnutls-dev, libgeos-dev (>= 3.4.0),
libpcre3-dev, libreadline-dev, liblzma-dev,
libssl-dev, libxml2-dev, pkg-config, python, python-dev, python-numpy,
- unixodbc-dev, uuid-dev, zlib1g-dev, liblas-c-dev (>= 1.8.0), r-base
+ unixodbc-dev, uuid-dev, zlib1g-dev, liblas-c-dev (>= 1.8.0), r-base,
+ libcfitsio3-dev
Standards-Version: 3.8.0
X-Python-Version: >= 2.6
@@ -176,6 +177,20 @@ Description: MonetDB5 SQL GIS support mo
.
This package contains support for reading and writing LiDAR data.
+Package: libmonetdb5-server-cfitsio
+Section: libs
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends},
+ monetdb5-sql (= ${source:Version})
+Description: MonetDB5 SQL GIS support module
+ MonetDB is a database management system that is developed from a
+ main-memory perspective with use of a fully decomposed storage model,
+ automatic index management, extensibility of data types and search
+ accelerators. It also has an SQL frontend.
+ .
+ This package contains a module for accessing data in the FITS file
+ format.
+
Package: libmonetdb5-server-bam
Section: libs
Architecture: any
diff --git a/debian/libmonetdb5-server-cfitsio.install
b/debian/libmonetdb5-server-cfitsio.install
new file mode 100644
--- /dev/null
+++ b/debian/libmonetdb5-server-cfitsio.install
@@ -0,0 +1,4 @@
+debian/tmp/usr/lib/monetdb5/autoload/*_fits.mal usr/lib/monetdb5/autoload
+debian/tmp/usr/lib/monetdb5/createdb/*_fits.sql usr/lib/monetdb5/createdb
+debian/tmp/usr/lib/monetdb5/fits.mal usr/lib/monetdb5
+debian/tmp/usr/lib/monetdb5/lib_fits.so usr/lib/monetdb5
diff --git a/debian/rules b/debian/rules
--- a/debian/rules
+++ b/debian/rules
@@ -19,7 +19,7 @@ override_dh_auto_configure:
--enable-developer=no \
--enable-embedded=no \
--enable-embedded-r=no \
- --enable-fits=no \
+ --enable-fits=yes \
--enable-gdk=yes \
--enable-geom=yes \
--enable-lidar=yes \
diff --git a/monetdb5/modules/mal/pcre.c b/monetdb5/modules/mal/pcre.c
--- a/monetdb5/modules/mal/pcre.c
+++ b/monetdb5/modules/mal/pcre.c
@@ -85,6 +85,7 @@ mal_export str ILIKEjoin1(bat *r1, bat *
/* current implementation assumes simple %keyword% [keyw%]* */
typedef struct RE {
char *k;
+ wchar_t *w;
bool search;
ptrdiff_t len;
struct RE *n;
@@ -95,7 +96,7 @@ typedef struct RE {
#ifdef _MSC_VER
/* on Windows, we cannot set the UTF-8 locale, so we need to implement
- * our own version of mbrtowc and mbstowcs */
+ * our own version of mbrtowc and mbsrtowcs */
static size_t
my_mbrtowc(wchar_t *dst, const char *src, size_t len)
@@ -128,63 +129,62 @@ my_mbrtowc(wchar_t *dst, const char *src
}
static size_t
-my_mbstowcs(wchar_t *dst, const char *src, size_t len)
+my_mbsrtowcs(wchar_t *dst, const char **src, size_t len)
{
size_t i;
+ const char *s = *src;
for (i = 0; i < len; i++) {
- if ((src[0] & 0x80) == 0) {
- *dst = src[0];
- src += 1;
- } else if ((src[0] & 0xE0) == 0xC0) {
- *dst = ((src[0] & 0x1F) << 6) | (src[1] & 0x3F);
- src += 2;
- } else if ((src[0] & 0xF0) == 0xE0) {
- *dst = ((src[0] & 0x0F) << 12) | ((src[1] & 0x3F) << 6)
| (src[2] & 0x3F);
- src += 3;
- } else if ((src[0] & 0xF8) == 0xF0) {
- *dst = ((src[0] & 0x0F) << 18) | ((src[1] & 0x3F) <<
12) | ((src[2] & 0x3F) << 6) | (src[3] & 0x3F);
- src += 4;
+ if ((s[0] & 0x80) == 0) {
+ dst[i] = s[0];
+ s += 1;
+ } else if ((s[0] & 0xE0) == 0xC0) {
+ dst[i] = ((s[0] & 0x1F) << 6) | (s[1] & 0x3F);
+ s += 2;
+ } else if ((s[0] & 0xF0) == 0xE0) {
+ dst[i] = ((s[0] & 0x0F) << 12) | ((s[1] & 0x3F) << 6) |
(s[2] & 0x3F);
+ s += 3;
+ } else if ((s[0] & 0xF8) == 0xF0) {
+ dst[i] = ((s[0] & 0x0F) << 18) | ((s[1] & 0x3F) << 12)
| ((s[2] & 0x3F) << 6) | (s[3] & 0x3F);
+ s += 4;
} else {
+ *src = s;
return (size_t) -1;
}
- if (*dst == 0)
+ if (dst[i] == 0) {
+ *src = NULL;
return i;
- dst++;
+ }
}
+ *src = s;
return i;
}
-#define mbrtowc(dst, src, len, ps) my_mbrtowc(dst, src, len)
-#define mbstowcs(dst, src, len) my_mbstowcs(dst, src, len)
+#define mbrtowc(dst, src, len, ps) my_mbrtowc(dst, src, len)
+#define mbsrtowcs(dst, src, len, ps) my_mbsrtowcs(dst, src, len)
#endif
static int
-mystrncasecmp(const char *s1, const char *s2, size_t n1)
+mywstrncasecmp(const char *s1, const wchar_t *s2, size_t n2)
{
- wchar_t c1, c2;
- size_t n2 = n1;
+ wchar_t c1;
#ifndef _MSC_VER
- mbstate_t ps1, ps2;
+ mbstate_t ps1;
memset(&ps1, 0, sizeof(ps1));
- memset(&ps2, 0, sizeof(ps2));
#endif
- while (n1 > 0 && n2 > 0) {
- size_t nn1 = mbrtowc(&c1, s1, n1, &ps1);
- size_t nn2 = mbrtowc(&c2, s2, n2, &ps2);
+ while (n2 > 0) {
+ size_t nn1 = mbrtowc(&c1, s1, 1000, &ps1);
if (nn1 == 0)
- return -(nn2 != 0);
- if (nn2 == 0)
+ return -(*s2 != 0);
+ if (*s2 == 0)
return 1;
- if (nn1 == (size_t) -1 || nn1 == (size_t) -2 ||
- nn2 == (size_t) -1 || nn2 == (size_t) -2)
+ if (nn1 == (size_t) -1 || nn1 == (size_t) -2)
return 0; /* actually an error that shouldn't
happen */
- if (towlower((wint_t) c1) != towlower((wint_t) c2))
- return towlower((wint_t) c1) - towlower((wint_t) c2);
- n1 -= nn1;
+ if (towlower((wint_t) c1) != towlower((wint_t) *s2))
+ return towlower((wint_t) c1) - towlower((wint_t) *s2);
s1 += nn1;
- n2 -= nn2;
- s2 += nn2;
+ n2--;
+ s2++;
}
return 0;
}
@@ -219,52 +219,75 @@ mystrcasecmp(const char *s1, const char
}
}
+static int
+mywstrcasecmp(const char *s1, const wchar_t *s2)
+{
+ wchar_t c1;
+
+#ifndef _MSC_VER
+ mbstate_t ps1;
+ memset(&ps1, 0, sizeof(ps1));
+#endif
+ for (;;) {
+ /* use some ridiculously high number as the length of the
+ * input strings: we will still not go beyond the terminating
+ * '\0' */
+ size_t nn1 = mbrtowc(&c1, s1, 1000, &ps1);
+ if (nn1 == 0)
+ return -(*s2 != 0);
+ if (*s2 == 0)
+ return 1;
+ if (nn1 == (size_t) -1 || nn1 == (size_t) -2)
+ return 0; /* actually an error that shouldn't
happen */
+ if (towlower((wint_t) c1) != towlower((wint_t) *s2))
+ return towlower((wint_t) c1) - towlower((wint_t) *s2);
+ s1 += nn1;
+ s2++;
+ }
+}
+
static const char *
-mystrcasestr(const char *haystack, const char *needle)
+mywstrcasestr(const char *haystack, const wchar_t *wneedle)
{
- size_t nlen = strlen(needle);
+ size_t nlen = wcslen(wneedle);
if (nlen == 0)
return haystack;
- wchar_t *wneedle = GDKmalloc((nlen + 1) * sizeof(wchar_t));
- if (wneedle == NULL || (nlen = mbstowcs(wneedle, needle, nlen + 1)) ==
(size_t) -1) {
- GDKfree(wneedle);
- nlen = strlen(needle);
- /* fallback code */
- for (size_t hlen = strlen(haystack); nlen <= hlen; hlen--) {
- if (mystrncasecmp(haystack, needle, nlen) == 0)
- return haystack;
- while ((*++haystack & 0xC0) == 0x80)
- hlen--;
- }
- return NULL;
- }
- for (wchar_t *w = wneedle; *w; w++)
- *w = (wchar_t) towlower((wint_t) *w);
+
+ size_t hlen = strlen(haystack);
#ifndef _MSC_VER
- mbstate_t ps;
+ mbstate_t ps, pss;
memset(&ps, 0, sizeof(ps));
+ pss = ps;
#endif
- for (size_t hlen = strlen(haystack); *haystack; hlen--) {
+
+ while (*haystack) {
size_t i;
- for (i = 0; i < nlen; i++) {
+ size_t h;
+ size_t step = 0;
+ for (i = h = 0; i < nlen; i++) {
wchar_t c;
- size_t j = mbrtowc(&c, haystack, hlen, &ps);
- if (j == 0) {
- GDKfree(wneedle);
+ size_t j = mbrtowc(&c, haystack + h, hlen - h, &ps);
+ if (j == 0)
return NULL;
+ if (i == 0) {
+ step = j;
+#ifndef _MSC_VER
+ pss = ps;
+#endif
}
- if (towlower((wint_t) c) != (wint_t) wneedle[i])
+ if (towlower((wint_t) c) != towlower((wint_t)
wneedle[i]))
break;
+ h += j;
}
- if (i == nlen) {
- GDKfree(wneedle);
+ if (i == nlen)
return haystack;
- }
- while ((*++haystack & 0xC0) == 0x80)
- hlen--;
+#ifndef _MSC_VER
+ ps = pss;
+#endif
+ haystack += step;
+ hlen -= step;
}
- GDKfree(wneedle);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list