annotate R/rdyncall/R/dynport.R @ 0:0cfcc391201f

initial from svn dyncall-1745
author Daniel Adler
date Thu, 19 Mar 2015 22:26:28 +0100
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
1 # Project: rdyncall
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
2 # File: R/dynports.R
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
3 # Description: repository for multi-platform bindings to binary components.
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
4 # Author: Daniel Adler <dadler@uni-goettingen.de>
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
5
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
6 dynport <- function(portname, portfile=NULL, repo=system.file("dynports", package="rdyncall"))
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
7 {
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
8 # literate portname string
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
9 portname <- as.character(substitute(portname))
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
10 if (missing(portfile))
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
11 {
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
12 # search for portfile
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
13 portfile <- file.path( repo, paste(portname,".R",sep="") )
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
14 if ( !file.exists(portfile) ) portfile <- file.path( repo, paste(portname,".json",sep="") )
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
15 if ( !file.exists(portfile) ) stop("dynport '", portname, "' not found.")
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
16 }
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
17 loadDynportNamespace(portname, portfile)
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
18 }
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
19
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
20 loadDynportNamespace <- function(name, portfile, do.attach=TRUE)
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
21 {
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
22 name <- as.character(name)
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
23 portfile <- as.character(portfile)
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
24 if (do.attach) {
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
25 envname <- paste("dynport", name, sep=":")
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
26 if ( envname %in% search() ) return()
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
27 env <- new.env()
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
28 sys.source(portfile, envir=env)
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
29 attach(env, name=envname)
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
30 } else {
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
31 env <- new.env()
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
32 sys.source(portfile, envir=env)
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
33 return(env)
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
34 }
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
35 }
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
36