Skip to content

Commit

Permalink
don't link against narray.so but instead dlopen narray
Browse files Browse the repository at this point in the history
  • Loading branch information
Soeren Sonnenburg committed Nov 22, 2011
1 parent 21f5ad2 commit fd6b20d
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 22 deletions.
2 changes: 1 addition & 1 deletion src/Makefile.template
Expand Up @@ -303,7 +303,7 @@ install-java_modular: $(TEMPLATE_TARGET)

install-ruby_modular: $(TEMPLATE_TARGET)
install -d -m755 "$(DESTDIR)/$(RUBY_EXTENSIONS_INSTALL_DIR)"
install -m755 modshogun.$(EXT_LIB) "$(DESTDIR)/$(RUBY_EXTENSIONS_INSTALL_DIR)/modshogun.$(EXT_LIB_SWIG_RUBY_MODULAR)"
install -m755 modshogun.$(EXT_LIB) "$(DESTDIR)/$(RUBY_EXTENSIONS_INSTALL_DIR)/modshogun$(EXT_LIB_SWIG_RUBY_MODULAR)"

install-lua_modular: $(TEMPLATE_TARGET)
install -d -m755 "$(DESTDIR)/$(LUA_EXTENSIONS_INSTALL_DIR)"
Expand Down
26 changes: 14 additions & 12 deletions src/configure
Expand Up @@ -29,7 +29,7 @@ EXT_IF_SWIG=.py
EXT_OBJ_SWIG=_wrap.cxx.o
EXT_LIB=so
EXT_LIB_SWIG_PYTHON_MODULAR=
EXT_LIB_SWIG_RUBY_MODULAR=so
EXT_LIB_SWIG_RUBY_MODULAR=.so
EXT_DOXY=.doxy
EXT_SWIG_DOXY=_doxygen.i
SWIGFLAGS="-w473 -w454 -w312 -w325 -fvirtual"
Expand Down Expand Up @@ -702,14 +702,14 @@ EOF
RUBYSO=`ruby -e 'require "mkmf"; puts Config::expand("$(RUBY_SO_NAME)")'`
if ld -o "$TMPO" -l$RUBYSO >/dev/null 2>&1
then
LINKFLAGS_RUBY="-l$RUBYSO -fPIC -shared"
LINKFLAGS_RUBY="-l$RUBYSO -fPIC -shared -ldl"
else
LINKFLAGS_RUBY="-lruby -fPIC -shared"
LINKFLAGS_RUBY="-lruby -fPIC -shared -ldl"
fi
EXT_IF_SWIG_RUBY_MODULAR='stop'
PRE_LIB_SWIG_RUBY_MODULAR=
if darwin ; then
EXT_LIB_SWIG_RUBY_MODULAR=bundle
EXT_LIB_SWIG_RUBY_MODULAR=.bundle
fi
SWIGFLAGS_RUBY_MODULAR="-c++ -ruby"

Expand Down Expand Up @@ -771,29 +771,30 @@ cat >$TMPC << EOF
int main(void)
{
VALUE cNArray;
volatile VALUE obj;
VALUE x = na_make_scalar(obj, NA_DFLOAT);
VALUE x = NULL; //na_make_scalar(obj, NA_DFLOAT);
return IsNArray(x) ? 1 : 0;
}
EOF

if test -f "$RUBY_LIBRARY_DIR"/narray.${EXT_LIB_SWIG_RUBY_MODULAR} ; then
LINKFLAGS_NARRAY="$RUBY_LIBRARY_DIR"/narray.${EXT_LIB_SWIG_RUBY_MODULAR}
if test -f "$RUBY_LIBRARY_DIR"/narray${EXT_LIB_SWIG_RUBY_MODULAR} ; then
NARRAY="$RUBY_LIBRARY_DIR"/narray${EXT_LIB_SWIG_RUBY_MODULAR}
elif gem list narray 2>&1 | grep -q narray
then
LINKFLAGS_NARRAY="$(dirname `gem which narray`)/narray.${EXT_LIB_SWIG_RUBY_MODULAR}"
NARRAY="$(dirname `gem which narray`)/narray${EXT_LIB_SWIG_RUBY_MODULAR}"
INCLUDES_RUBY="-I$(dirname `gem which narray`) $INCLUDES_RUBY"
else
LINKFLAGS_NARRAY="$RUBY_VENDOR_LIBRARY_DIR"/narray.${EXT_LIB_SWIG_RUBY_MODULAR}
NARRAY="$RUBY_VENDOR_LIBRARY_DIR"/narray${EXT_LIB_SWIG_RUBY_MODULAR}
fi

echocheck "Ruby NArray Developer Files"
if cc_check $INCLUDES_RUBY $LINKFLAGS_RUBY $LINKFLAGS_NARRAY
if cc_check $INCLUDES_RUBY $LINKFLAGS_RUBY && test -f $NARRAY
then
echores "yes"
DEFINES="$DEFINES -DHAVE_RUBY_NARRAY"
HAVE_NARRAY='#define HAVE_RUBY_NARRAY 1'
LINKFLAGS_RUBY="$LINKFLAGS_RUBY $LINKFLAGS_NARRAY"
NARRAY_LIB="#define NARRAY_LIB \"$NARRAY\""
else
if test "$_ruby_modular" = yes
then
Expand Down Expand Up @@ -4797,7 +4798,7 @@ SWIGFLAGS_CSHARP_MODULAR = ${SWIGFLAGS_CSHARP_MODULAR}
PRE_LIB_SWIG_RUBY_MODULAR = ${PRE_LIB_SWIG_RUBY_MODULAR}
EXT_LIB_SWIG_RUBY_MODULAR = ${EXT_LIB_SWIG_RUBY_MODULAR}
EXT_IF_SWIG_RUBY_MODULAR = ${EXT_IF_SWIG_RUBY_MODULAR}
EXT_IF_SWIG_RUBY_MODULAR = ${EXT_IF_SWIG_RUBY_MODULAR}
DEFINES_RUBY_MODULAR = ${DEFINES_RUBY}
INCLUDES_RUBY_MODULAR = ${INCLUDES_RUBY}
PRELINKFLAGS_RUBY_MODULAR = ${PRELINKFLAGS_RUBY}
Expand Down Expand Up @@ -4890,6 +4891,7 @@ $USE_HMMPARALLELSTRUCTURES
$USE_HMMPARALLEL
$USE_SVMPARALLEL
$USE_BIGOBS
$NARRAY_LIB
$USE_BIGSTATES
$USE_HMMCACHE
$USE_KERNELCACHE
Expand Down
23 changes: 23 additions & 0 deletions src/interfaces/modular/SGBase.i
Expand Up @@ -76,6 +76,17 @@ public void readExternal(java.io.ObjectInput in) throws java.io.IOException, jav
#endif

%{
#ifdef SWIGRUBY
extern "C" {
#include <narray.h>
#include <stdlib.h>
#include <stdio.h>
}
VALUE (*na_to_array_dl)(VALUE);
VALUE (*na_to_narray_dl)(VALUE);
VALUE cNArray;
#include <dlfcn.h>
#endif
/* required for python */
#define SWIG_FILE_WITH_INIT

Expand Down Expand Up @@ -127,6 +138,18 @@ public void readExternal(java.io.ObjectInput in) throws java.io.IOException, jav
#ifdef SWIGPYTHON
import_array();
#endif

#ifdef SWIGRUBY
void* handle = dlopen(NARRAY_LIB, RTLD_LAZY);
if (!handle) {
fprintf(stderr, "%s\n", dlerror());
exit(EXIT_FAILURE);
}

*(void **) (&na_to_array_dl) = dlsym(handle, "na_to_array");
*(void **) (&na_to_narray_dl) = dlsym(handle, "na_to_narray");
*(void **) (&cNArray) = dlsym(handle, "cNArray");
#endif
%}

%exception
Expand Down
14 changes: 5 additions & 9 deletions src/interfaces/ruby_modular/swig_typemaps.i
Expand Up @@ -7,11 +7,6 @@
* Written (W) 2011 Baozeng Ding
*
*/
%{
extern "C" {
#include <narray.h>
}
%}

/* One dimensional input/output arrays */
%define TYPEMAP_SGVECTOR(SGTYPE, R2SG, SG2R)
Expand Down Expand Up @@ -39,7 +34,8 @@ extern "C" {
}
else {
if (NA_IsNArray($input)) {
VALUE v = na_to_array($input);

VALUE v = na_to_array_dl($input);
len = RARRAY_LEN(v);
array = SG_MALLOC(SGTYPE, len);

Expand All @@ -65,7 +61,7 @@ extern "C" {

$1.free_vector();

$result = na_to_narray(arr);
$result = na_to_narray_dl(arr);
}

%enddef
Expand Down Expand Up @@ -102,7 +98,7 @@ TYPEMAP_SGVECTOR(float64_t, NUM2DBL, rb_float_new)

if (rb_obj_is_kind_of($input,rb_cArray) || NA_IsNArray($input)) {
if (NA_IsNArray($input)) {
v = na_to_array($input);
v = na_to_array_dl($input);
}
else {
v = $input;
Expand Down Expand Up @@ -149,7 +145,7 @@ TYPEMAP_SGVECTOR(float64_t, NUM2DBL, rb_float_new)

$1.free_matrix();

$result = na_to_narray(arr);
$result = na_to_narray_dl(arr);
}

%enddef
Expand Down

0 comments on commit fd6b20d

Please sign in to comment.