diff R/rdyncall/R/dynfind.R @ 0:0cfcc391201f

initial from svn dyncall-1745
author Daniel Adler
date Thu, 19 Mar 2015 22:26:28 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/R/rdyncall/R/dynfind.R	Thu Mar 19 22:26:28 2015 +0100
@@ -0,0 +1,32 @@
+
+dynfind1 <- if (.Platform$OS.type == "windows") {
+  function(name, ...) {
+    handle <- .dynload(paste("lib",name,sep=""),...)
+    if (!is.null(handle)) return(handle)
+    .dynload(name,...)
+  }
+} else {
+  if ( Sys.info()[["sysname"]] == "Darwin" ) {
+    function(name, ...) {
+      handle <- .dynload(paste(name,".framework/",name,sep=""),...)
+      if (!is.null(handle)) return(handle)
+      .dynload(paste("lib",name,".dylib",sep=""),...)
+    }
+  } else {
+    function(name, ...) {
+      handle <- .dynload(paste("lib",name,".so",sep=""),...)
+      if (!is.null(handle)) return(handle)
+      handle <- .dynload(paste("lib",name,sep=""),...)
+      if (!is.null(handle)) return(handle)
+      .dynload(paste(name,sep=""),...)  # needed by Solaris to lookup 'R'.
+    }
+  }
+}
+
+dynfind <- function(libnames, auto.unload = TRUE) {
+  for (libname in libnames) {
+    handle <- dynfind1(libname, auto.unload)
+    if (!is.null(handle)) return(handle)
+  }
+}
+