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