Changeset: 8d070481b79b for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8d070481b79b
Modified Files:
        gdk/gdk_posix.c
        monetdb5/modules/mal/pcre.c
        tools/embedded/build-rpkg.sh
        tools/embedded/embedded.c
        tools/embedded/embedded.h
        tools/embedded/rpackage/DESCRIPTION
        tools/embedded/rpackage/NAMESPACE
        tools/embedded/rpackage/R/monetdb.R
        tools/embedded/rpackage/configure
        tools/embedded/rpackage/configure.win
Branch: embedded
Log Message:

Now possible to move this around in the fs. Also, almost there on Windows.


diffs (295 lines):

diff --git a/gdk/gdk_posix.c b/gdk/gdk_posix.c
--- a/gdk/gdk_posix.c
+++ b/gdk/gdk_posix.c
@@ -943,10 +943,9 @@ gettimeofday(struct timeval *tv, int *ig
 #endif
 
 void *
-mdlopen(const char *library, int mode)
+mdlopen(const char *file, int mode)
 {
-       (void) mode;
-       return GetModuleHandle(library);
+       return dlopen(file, mode);
 }
 
 void *
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
@@ -736,8 +736,10 @@ str
 pcre_init(void *ret)
 {
        (void) ret;
+#if !defined(HAVE_EMBEDDED) && !defined(NATIVE_WIN32)
        pcre_malloc = my_pcre_malloc;
        pcre_free = my_pcre_free;
+#endif
        return NULL;
 }
 
diff --git a/tools/embedded/build-rpkg.sh b/tools/embedded/build-rpkg.sh
--- a/tools/embedded/build-rpkg.sh
+++ b/tools/embedded/build-rpkg.sh
@@ -2,7 +2,7 @@
 #set -x
 
 STAGEDIR=/tmp/monetdb-embedded-stage
-RPKG=MonetDBLite_1.0.0.tar.gz
+RPKG=MonetDBLite_0.1.0.tar.gz
 
 rm -rf $STAGEDIR
 
@@ -44,7 +44,7 @@ R CMD build rpackage
 scp $RPKG [email protected]:/var/www/html/Assets/R/
 
 echo
-echo 'install.packages("MonetDBLite", 
repos="http://homepages.cwi.nl/~hannes/R/";, type="source")'
+echo 'install.packages("MonetDBLite", 
repos="http://dev.monetdb.org/Assets/R/";, type="source")'
 echo
 
-# OSX 10.10 check (check vanilla!)
+# OSX 10.10/10.11 needs pkg-config!
diff --git a/tools/embedded/embedded.c b/tools/embedded/embedded.c
--- a/tools/embedded/embedded.c
+++ b/tools/embedded/embedded.c
@@ -46,9 +46,9 @@ mvc_trans_ptr_tpe mvc_trans_ptr = NULL;
 static bit monetdb_embedded_initialized = 0;
 static MT_Lock monetdb_embedded_lock;
 
-static void* lookup_function(char* lib, char* func) {
+static void* lookup_function(char* func) {
        void *dl, *fun;
-       dl = mdlopen(lib, RTLD_NOW | RTLD_GLOBAL);
+       dl = mdlopen("libmonetdb5", RTLD_NOW | RTLD_GLOBAL);
        if (dl == NULL) {
                return NULL;
        }
@@ -57,7 +57,7 @@ static void* lookup_function(char* lib, 
        return fun;
 }
 
-char* monetdb_startup(char* dir, char silent) {
+char* monetdb_startup(char* installdir, char* dbdir, char silent) {
        opt *set = NULL;
        int setlen = 0;
        char* retval = NULL;
@@ -73,44 +73,47 @@ char* monetdb_startup(char* dir, char si
                }
                goto cleanup;
        }
-
        MT_lock_init(&monetdb_embedded_lock, "monetdb_embedded_lock");
        MT_lock_set(&monetdb_embedded_lock, "monetdb.startup");
        if (monetdb_embedded_initialized) goto cleanup;
 
+#ifdef NATIVE_WIN32
+       SetDllDirectory(installdir);
+#endif
+
        setlen = mo_builtin_settings(&set);
-       setlen = mo_add_option(&set, setlen, opt_cmdline, "gdk_dbpath", dir);
+       setlen = mo_add_option(&set, setlen, opt_cmdline, "gdk_dbpath", dbdir);
        if (GDKinit(set, setlen) == 0) {
                retval = GDKstrdup("GDKinit() failed");
                goto cleanup;
        }
-
-       snprintf(mod_path, 1000, "%s/../lib/monetdb5", BINDIR);
+       snprintf(mod_path, 1000, "%s/lib/monetdb5", installdir);
        GDKsetenv("monet_mod_path", mod_path);
        GDKsetenv("mapi_disable", "true");
        GDKsetenv("max_clients", "0");
-       GDKsetenv("sql_optimizer", "sequential_pipe"); // TODO: SELECT * FROM 
table should not use mitosis in the first place.
+       // TODO: SELECT * FROM table should not use mitosis in the first place 
(?).
+       GDKsetenv("sql_optimizer", "sequential_pipe");
 
        if (silent) THRdata[0] = stream_blackhole_create();
        msab_dbpathinit(GDKgetenv("gdk_dbpath"));
-       if (mal_init() != 0) {
+
+       if (mal_init() != 0) { // mal_init() does not return meaningful codes 
on failure
                retval = GDKstrdup("mal_init() failed");
                goto cleanup;
        }
        if (silent) mal_clients[0].fdout = THRdata[0];
 
-       // This dynamically looks up functions, because the library containing 
them is loaded at runtime.
-       // argh
-       SQLstatementIntern_ptr = (SQLstatementIntern_ptr_tpe) 
lookup_function("lib_sql",  "SQLstatementIntern");
-       SQLautocommit_ptr = (SQLautocommit_ptr_tpe) lookup_function("lib_sql",  
"SQLautocommit");
-       SQLinitClient_ptr = (SQLinitClient_ptr_tpe) lookup_function("lib_sql",  
"SQLinitClient");
-       getSQLContext_ptr = (getSQLContext_ptr_tpe) lookup_function("lib_sql",  
"getSQLContext");
-       res_table_destroy_ptr  = (res_table_destroy_ptr_tpe)  
lookup_function("libstore", "res_table_destroy");
-       mvc_append_wrap_ptr = (mvc_append_wrap_ptr_tpe)  
lookup_function("lib_sql", "mvc_append_wrap");
-       mvc_bind_schema_ptr = (mvc_bind_schema_ptr_tpe)  
lookup_function("lib_sql", "mvc_bind_schema");
-       mvc_bind_table_ptr = (mvc_bind_table_ptr_tpe)  
lookup_function("lib_sql", "mvc_bind_table");
-       sqlcleanup_ptr = (sqlcleanup_ptr_tpe)  lookup_function("lib_sql", 
"sqlcleanup");
-       mvc_trans_ptr = (mvc_trans_ptr_tpe) lookup_function("lib_sql", 
"mvc_trans");
+       // This dynamically looks up functions, because the libraries 
containing them are loaded at runtime.
+       SQLstatementIntern_ptr = (SQLstatementIntern_ptr_tpe) 
lookup_function("SQLstatementIntern");
+       SQLautocommit_ptr      = (SQLautocommit_ptr_tpe)      
lookup_function("SQLautocommit");
+       SQLinitClient_ptr      = (SQLinitClient_ptr_tpe)      
lookup_function("SQLinitClient");
+       getSQLContext_ptr      = (getSQLContext_ptr_tpe)      
lookup_function("getSQLContext");
+       res_table_destroy_ptr  = (res_table_destroy_ptr_tpe)  
lookup_function("res_table_destroy");
+       mvc_append_wrap_ptr    = (mvc_append_wrap_ptr_tpe)    
lookup_function("mvc_append_wrap");
+       mvc_bind_schema_ptr    = (mvc_bind_schema_ptr_tpe)    
lookup_function("mvc_bind_schema");
+       mvc_bind_table_ptr     = (mvc_bind_table_ptr_tpe)     
lookup_function("mvc_bind_table");
+       sqlcleanup_ptr         = (sqlcleanup_ptr_tpe)         
lookup_function("sqlcleanup");
+       mvc_trans_ptr          = (mvc_trans_ptr_tpe)          
lookup_function("mvc_trans");
 
        if (SQLstatementIntern_ptr == NULL || SQLautocommit_ptr == NULL ||
                        SQLinitClient_ptr == NULL || getSQLContext_ptr == NULL 
||
@@ -266,16 +269,21 @@ SEXP monetdb_query_R(SEXP query, SEXP no
        return ScalarLogical(1);
 }
 
-SEXP monetdb_startup_R(SEXP dirsexp, SEXP silentsexp) {
-       const char* dir = NULL;
+SEXP monetdb_startup_R(SEXP installdirsexp, SEXP dbdirsexp, SEXP silentsexp) {
+       const char* installdir = NULL;
+       const char* dbdir=NULL;
        char silent = 0;
        char* res = NULL;
+
        if (monetdb_embedded_initialized) {
                return ScalarLogical(0);
        }
-       dir = CHAR(STRING_ELT(dirsexp, 0));
+       installdir = CHAR(STRING_ELT(installdirsexp, 0));
+       dbdir = CHAR(STRING_ELT(dbdirsexp, 0));
        silent = LOGICAL(silentsexp)[0];
-       res = monetdb_startup((char*) dir, silent);
+
+       res = monetdb_startup((char*) installdir, (char*) dbdir, silent);
+
        if (res == NULL) {
                return ScalarLogical(1);
        }  else {
diff --git a/tools/embedded/embedded.h b/tools/embedded/embedded.h
--- a/tools/embedded/embedded.h
+++ b/tools/embedded/embedded.h
@@ -20,12 +20,12 @@ typedef struct append_data {
        ssize_t batid;
 } append_data;
 
-char* monetdb_startup(char* dir, char silent);
+char* monetdb_startup(char* installdir, char* dbdir, char silent);
 char* monetdb_query(char* query, void** result);
 char* monetdb_append(const char* schema, const char* table, append_data *ad, 
int ncols);
 void monetdb_cleanup_result(void* output);
 SEXP monetdb_query_R(SEXP querysexp, SEXP notreally);
-SEXP monetdb_startup_R(SEXP dirsexp, SEXP silentsexp);
+SEXP monetdb_startup_R(SEXP installdirsexp, SEXP dbdirsexp, SEXP silentsexp);
 SEXP monetdb_append_R(SEXP schemaname, SEXP tablename, SEXP tabledata);
 
 #endif
diff --git a/tools/embedded/rpackage/DESCRIPTION 
b/tools/embedded/rpackage/DESCRIPTION
--- a/tools/embedded/rpackage/DESCRIPTION
+++ b/tools/embedded/rpackage/DESCRIPTION
@@ -1,7 +1,7 @@
 Package: MonetDBLite
-Version: 1.0.0
+Version: 0.1.0
 Title: In-Process version of MonetDB for R
-Authors@R: c(person("Hannes Muehleisen", role = c("aut", "cre"),email = 
"[email protected]"))
+Authors@R: c(person("Hannes Muehleisen", role = c("aut", "cre"), email = 
"[email protected]"))
 Author: Hannes Muehleisen [aut, cre]
 Maintainer: Hannes Muehleisen <[email protected]>
 Description: Blarg.
diff --git a/tools/embedded/rpackage/NAMESPACE 
b/tools/embedded/rpackage/NAMESPACE
--- a/tools/embedded/rpackage/NAMESPACE
+++ b/tools/embedded/rpackage/NAMESPACE
@@ -1,4 +1,4 @@
-useDynLib(MonetDB)
+useDynLib(libmonetdb5)
 export(monetdb_embedded_startup)
 export(monetdb_embedded_query)
 export(monetdb_embedded_append)
diff --git a/tools/embedded/rpackage/R/monetdb.R 
b/tools/embedded/rpackage/R/monetdb.R
--- a/tools/embedded/rpackage/R/monetdb.R
+++ b/tools/embedded/rpackage/R/monetdb.R
@@ -1,7 +1,8 @@
+# we need this to find our MAL scripts and DLLs on Windows
+installdir <- ""
+
 .onLoad <- function(libname, pkgname){
-       # TODO: DLL on Windows
-       # TODO: save pkg path here to use in startup for monetdb_startup_R
-       dyn.load(file.path(libname, pkgname, "libs", "MonetDB.so"), local=F, 
now=F)
+       installdir <<- file.path(libname, pkgname, "libs")
 }
 
 monetdb_embedded_startup <- function(dir=tempdir(), quiet=TRUE) {
@@ -16,7 +17,7 @@ monetdb_embedded_startup <- function(dir
        if (file.access(dir, mode=2) < 0) {
                stop("Cannot write to ", dir)
        }
-       res <- .Call("monetdb_startup_R", dir, quiet)
+       res <- .Call("monetdb_startup_R", installdir, dir, quiet)
        if (is.character(res)) {
                stop("Failed to initialize embedded MonetDB ", res)
        }
diff --git a/tools/embedded/rpackage/configure 
b/tools/embedded/rpackage/configure
--- a/tools/embedded/rpackage/configure
+++ b/tools/embedded/rpackage/configure
@@ -1,7 +1,7 @@
 #!/bin/sh
 cd src
 
-CFLAGS="-I$R_INCLUDE_DIR" ./configure --prefix=$R_PACKAGE_DIR/install \
+CFLAGS="-I$R_INCLUDE_DIR" ./configure --prefix=$R_PACKAGE_DIR/libs \
 --enable-embedded --disable-fits --disable-geom --disable-rintegration 
--disable-gsl --disable-netcdf \
 --disable-jdbc --disable-merocontrol --disable-odbc --disable-console 
--disable-microhttpd \
 --without-perl --without-python2 --without-python3 --without-rubygem 
--without-unixodbc \
@@ -19,14 +19,14 @@ cd ..
 mkdir -p $R_PACKAGE_DIR/libs/
 
 # and finally put the embedded library where R expects it
-RDYNLIB=$R_PACKAGE_DIR/libs/MonetDB.so
+RDYNLIB=$R_PACKAGE_DIR/libs/libmonetdb5.so
 # TODO: this number should probably be pulled from automake and friends
 VER=1
-if [ -f "$R_PACKAGE_DIR/install/lib/libembedded.$VER.dylib" ]; then
-    ln -s $R_PACKAGE_DIR/install/lib/libembedded.$VER.dylib $RDYNLIB
+if [ -f "$R_PACKAGE_DIR/libs/lib/libembedded.$VER.dylib" ]; then
+    ln -s $R_PACKAGE_DIR/libs/lib/libembedded.$VER.dylib $RDYNLIB
 fi
-if [ -f "$R_PACKAGE_DIR/install/lib/libembedded.so.$VER" ]; then
-    ln -s $R_PACKAGE_DIR/install/lib/libembedded.so.$VER $RDYNLIB
+if [ -f "$R_PACKAGE_DIR/libs/lib/libembedded.so.$VER" ]; then
+    ln -s $R_PACKAGE_DIR/libs/lib/libembedded.so.$VER $RDYNLIB
 fi
 if [ ! -f $RDYNLIB ]; then
        echo "configure/build failure"
diff --git a/tools/embedded/rpackage/configure.win 
b/tools/embedded/rpackage/configure.win
--- a/tools/embedded/rpackage/configure.win
+++ b/tools/embedded/rpackage/configure.win
@@ -1,13 +1,21 @@
+# FIXME
+# patch sedscript for paths
+
+#sh src/tools/embedded/windows/pmc.sh
 cd src
-sh tools/embedded/windows/pmc.sh
+# FIXME
+find . -name "*.la" -delete
+# FIXME
 make
 cd tools/embedded
-rm MonetDB.dll
-rm MonetDB.o
-cp libembedded_la-embedded.lo MonetDB.o
-"${R_HOME}/bin/R.exe" CMD SHLIB -o MonetDB.dll MonetDB.o 
../../common/stream/libstream.la ../../common/utils/libmsabaoth.la 
../../common/utils/libmutils.la ../../common/utils/libmcrypt.la 
../../gdk/libbat.la ../../monetdb5/tools/libmonetdb5.la 
../../sql/server/libsqlserver.la ../../sql/backends/monet5/lib_sql.la 
../../sql/storage/libstore.la ../../sql/storage/bat/libbatstore.la 
../../sql/common/libsqlcommon.la -lpthread -lpsapi -lws2_32 -static-libgcc 
-static-libstdc++
+cp libembedded_la-embedded.lo libmonetdb5.o
+cp libembedded.la libembedded.a
+cp ../../sql/backends/monet5/lib_sql.la ../../sql/backends/monet5/libsql.a
+
+"${R_HOME}/bin/R.exe" CMD SHLIB -o libmonetdb5.dll libmonetdb5.o -L. 
-L../../sql/backends/monet5 -Wl,--whole-archive -lembedded -lsql 
-Wl,--no-whole-archive -lpthread -lpsapi -lws2_32 -static-libgcc 
-static-libstdc++ -Wl,--export-all-symbols -Wl,--allow-multiple-definition 
-Lwindows/pcre-8.37.win64/bin -lpcre
+
 cd ../../..
 mkdir -p $R_PACKAGE_DIR/libs
-cp src/tools/embedded/MonetDB.dll  $R_PACKAGE_DIR/libs
+cp src/tools/embedded/libmonetdb5.dll  src/
 
 # When configure.win is run the environment variables R_HOME (which uses 
‘/’ as the file separator), R_ARCH and Use R_ARCH_BIN will be set. Use 
R_ARCH to decide if this is a 64-bit build (its value there is ‘/x64’) and 
to install DLLs to the correct place (${R_HOME}/libs${R_ARCH}). Use R_ARCH_BIN 
to find the correct place under the bin directory, e.g. 
${R_HOME}/bin${R_ARCH_BIN}/Rscript.exe.
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to