[Rcpp-commits] r934 - pkg/Rcpp/R

noreply at r-forge.r-project.org noreply at r-forge.r-project.org
Sat Mar 20 23:09:10 CET 2010


Author: edd
Date: 2010-03-20 23:09:10 +0100 (Sat, 20 Mar 2010)
New Revision: 934

Added:
   pkg/Rcpp/R/RcppLdpath.R.proposed
Modified:
   pkg/Rcpp/R/RcppLdpath.R
Log:
reverting RcppLdpath


Modified: pkg/Rcpp/R/RcppLdpath.R
===================================================================
--- pkg/Rcpp/R/RcppLdpath.R	2010-03-20 22:00:24 UTC (rev 933)
+++ pkg/Rcpp/R/RcppLdpath.R	2010-03-20 22:09:10 UTC (rev 934)
@@ -2,7 +2,12 @@
 ## Use R's internal knowledge of path settings to find the lib/ directory
 ## plus optinally an arch-specific directory on system building multi-arch
 RcppLdPath <- function() {
-	packageLibPath( package = "Rcpp" )
+    if (nzchar(.Platform$r_arch)) {	## eg amd64, ia64, mips
+        path <- system.file("lib",.Platform$r_arch,package="Rcpp")
+    } else {
+        path <- system.file("lib",package="Rcpp")
+    }
+    path
 }
 
 ## Provide linker flags -- i.e. -L/path/to/libRcpp -- as well as an
@@ -10,10 +15,23 @@
 ## location.  This is not needed on OS X where we encode this as library
 ## built time (see src/Makevars) or Windows where we use a static library
 ## Updated Jan 2010:  We now default to static linking but allow the use
-##                    of rpath on Linux if static==FALSE has been chose
+##                    of rpath on Linux if static==FALSE has been chosen
 ##                    Note that this is probably being called from LdFlags()
-RcppLdFlags <- function(static=staticLinking()) {
-    packageLdFlags( "Rcpp", static )
+RcppLdFlags <- function(static=TRUE) {
+    rcppdir <- RcppLdPath()
+    if (static) {                               # static is default on Windows and OS X
+        flags <- paste(rcppdir, "/libRcpp.a", sep="")
+        if (.Platform$OS.type=="windows") {
+            flags <- shQuote(flags)
+        }
+    } else {					# else for dynamic linking
+        flags <- paste("-L", rcppdir, " -lRcpp", sep="") # baseline setting
+        if ((.Platform$OS.type == "unix") &&    # on Linux, we can use rpath to encode path
+            (length(grep("^linux",R.version$os)))) {
+            flags <- paste(flags, " -Wl,-rpath,", rcppdir, sep="")
+        }
+    }
+    invisible(flags)
 }
 
 # indicates if Rcpp was compiled with GCC >= 4.3
@@ -21,8 +39,11 @@
 
 ## Provide compiler flags -- i.e. -I/path/to/Rcpp.h
 RcppCxxFlags <- function(cxx0x=FALSE) {
-    iflag <- includeFlag( package = "Rcpp" )
-    paste( iflag, if( cxx0x && canUseCXX0X() ) " -std=c++0x" else "" )
+    path <- RcppLdPath()
+    if (.Platform$OS.type=="windows") {
+        path <- shQuote(path)
+    }
+    paste("-I", path, if( cxx0x && canUseCXX0X() ) " -std=c++0x" else "", sep="")
 }
 
 ## Shorter names, and call cat() directly
@@ -31,7 +52,7 @@
     cat(RcppCxxFlags(cxx0x=cxx0x))
 }
 ## LdFlags defaults to static linking on the non-Linux platforms Windows and OS X
-LdFlags <- function(static=staticLinking()) {
+LdFlags <- function(static=ifelse(length(grep("^linux",R.version$os))==0, TRUE, FALSE)) {
     cat(RcppLdFlags(static=static))
 }
 
@@ -48,73 +69,3 @@
 
 Cxx0xFlags <- function() cat( RcppCxx0xFlags() )
 
-
-
-
-# indicates the default linking on the current platform
-#
-# default is to use static linking on windows an OSX
-staticLinking <- function(){
-	.Platform$OS.type == "windows" || grepl( "^darwin", R.version$os )
-}
-
-# the /lib path of the specified package (maybe including the arch)
-packageLibPath <- function( package = "Rcpp" ){
-	if (nzchar(.Platform$r_arch)) {	## eg amd64, ia64, mips
-        system.file("lib",.Platform$r_arch,package=package)
-    } else {
-        system.file("lib",package=package)
-    }
-}
-
-# on windows wrap the file with shQuote, 
-# otherwise, do nothing
-wrapFile <- function( file ){
-	if (.Platform$OS.type=="windows") {
-        file <- shQuote(file)
-    }
-    file
-}
-
-# generic include flag 
-includeFlag <- function( package = "Rcpp" ){
-	paste( "-I", wrapFile(packageLibPath(package)), sep = "" )
-}
-
-# path to the static library file
-staticLib <- function(package = "Rcpp" ){
-	libfoo.a <- file.path( packageLibPath(package = package), sprintf( "lib%s.a", package ) )
-	wrapFile( libfoo.a )
-}
-
-# dynamic library flags for the given package
-dynamicLib <- function( package = "Rcpp" ){
-	libPath <- packageLibPath( package )
-
-	# general default
-	flags <- sprintf( "-L%s -l%s", 
-		libPath, 
-		package
-	)
-	
-	# linux -rpath bonus
-	if (.Platform$OS.type == "unix") {
-        if (length(grep("^linux",R.version$os))) {
-            flags <- sprintf( "%s -Wl,-rpath,%s", flags, libPath)
-        }
-    }
-    
-    flags
-}
-
-
-packageLdFlags <- function( package = "Rcpp", static = staticLinking() ){
-	if( static ){
-		staticLib( package = package )
-	} else {
-		dynamicLib( package = package )
-	}
-}
-
-
-

Added: pkg/Rcpp/R/RcppLdpath.R.proposed
===================================================================
--- pkg/Rcpp/R/RcppLdpath.R.proposed	                        (rev 0)
+++ pkg/Rcpp/R/RcppLdpath.R.proposed	2010-03-20 22:09:10 UTC (rev 934)
@@ -0,0 +1,120 @@
+
+## Use R's internal knowledge of path settings to find the lib/ directory
+## plus optinally an arch-specific directory on system building multi-arch
+RcppLdPath <- function() {
+	packageLibPath( package = "Rcpp" )
+}
+
+## Provide linker flags -- i.e. -L/path/to/libRcpp -- as well as an
+## optional rpath call needed to tell the Linux dynamic linker about the
+## location.  This is not needed on OS X where we encode this as library
+## built time (see src/Makevars) or Windows where we use a static library
+## Updated Jan 2010:  We now default to static linking but allow the use
+##                    of rpath on Linux if static==FALSE has been chosen
+##                    Note that this is probably being called from LdFlags()
+RcppLdFlags <- function(static=staticLinking()) {
+    packageLdFlags( "Rcpp", static )
+}
+
+# indicates if Rcpp was compiled with GCC >= 4.3
+canUseCXX0X <- function() .Call( "canUseCXX0X", PACKAGE = "Rcpp" )
+
+## Provide compiler flags -- i.e. -I/path/to/Rcpp.h
+RcppCxxFlags <- function(cxx0x=FALSE) {
+    iflag <- includeFlag( package = "Rcpp" )
+    paste( iflag, if( cxx0x && canUseCXX0X() ) " -std=c++0x" else "" )
+}
+
+## Shorter names, and call cat() directly
+## CxxFlags defaults to no using c++0x extensions are these are considered non-portable
+CxxFlags <- function(cxx0x=FALSE) {
+    cat(RcppCxxFlags(cxx0x=cxx0x))
+}
+## LdFlags defaults to static linking on the non-Linux platforms Windows and OS X
+LdFlags <- function(static=staticLinking()) {
+    cat(RcppLdFlags(static=static))
+}
+
+# capabilities
+RcppCapabilities <- capabilities <- function() .Call("capabilities", PACKAGE = "Rcpp")
+
+# compile, load and call the cxx0x.c script to identify whether
+# the compiler is GCC >= 4.3
+RcppCxx0xFlags <- function(){
+	script <- system.file( "discovery", "cxx0x.R", package = "Rcpp" )
+	flag <- capture.output( source( script ) )
+	flag
+}
+
+Cxx0xFlags <- function() cat( RcppCxx0xFlags() )
+
+
+
+
+# indicates the default linking on the current platform
+#
+# default is to use static linking on windows an OSX
+staticLinking <- function(){
+	.Platform$OS.type == "windows" || grepl( "^darwin", R.version$os )
+}
+
+# the /lib path of the specified package (maybe including the arch)
+packageLibPath <- function( package = "Rcpp" ){
+	if (nzchar(.Platform$r_arch)) {	## eg amd64, ia64, mips
+        system.file("lib",.Platform$r_arch,package=package)
+    } else {
+        system.file("lib",package=package)
+    }
+}
+
+# on windows wrap the file with shQuote, 
+# otherwise, do nothing
+wrapFile <- function( file ){
+	if (.Platform$OS.type=="windows") {
+        file <- shQuote(file)
+    }
+    file
+}
+
+# generic include flag 
+includeFlag <- function( package = "Rcpp" ){
+	paste( "-I", wrapFile(packageLibPath(package)), sep = "" )
+}
+
+# path to the static library file
+staticLib <- function(package = "Rcpp" ){
+	libfoo.a <- file.path( packageLibPath(package = package), sprintf( "lib%s.a", package ) )
+	wrapFile( libfoo.a )
+}
+
+# dynamic library flags for the given package
+dynamicLib <- function( package = "Rcpp" ){
+	libPath <- packageLibPath( package )
+
+	# general default
+	flags <- sprintf( "-L%s -l%s", 
+		libPath, 
+		package
+	)
+	
+	# linux -rpath bonus
+	if (.Platform$OS.type == "unix") {
+        if (length(grep("^linux",R.version$os))) {
+            flags <- sprintf( "%s -Wl,-rpath,%s", flags, libPath)
+        }
+    }
+    
+    flags
+}
+
+
+packageLdFlags <- function( package = "Rcpp", static = staticLinking() ){
+	if( static ){
+		staticLib( package = package )
+	} else {
+		dynamicLib( package = package )
+	}
+}
+
+
+



More information about the Rcpp-commits mailing list