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

Reply via email to