From 672594cf38591923d9735f532b29af0b6a69e5c9 Mon Sep 17 00:00:00 2001 From: Benjamin Auder Date: Sat, 31 Jan 2015 23:42:26 +0100 Subject: [PATCH] first commit --- DESCRIPTION | 5 +++-- R/load.R | 17 ++++++++-------- R/setup.R | 4 ++-- README | 37 +++++++++++++++++++++++++++++++++- man/pkgdev.check.Rd | 14 +++++++++++++ man/pkgdev.clean.Rd | 16 +++++++++++++++ man/pkgdev.ctest.Rd | 18 +++++++++++++++++ man/pkgdev.load.Rd | 16 +++++++++++++++ man/pkgdev.rtest.Rd | 18 +++++++++++++++++ man/pkgdev.tocran.Rd | 16 +++++++++++++++ man/pkgdev.unload.Rd | 14 +++++++++++++ man/pkgdev.wipeAll.Rd | 13 ++++++++++++ pkgTest/DESCRIPTION | 11 ++++++++++ pkgTest/NAMESPACE | 4 ++++ pkgTest/R/a.R | 3 +++ pkgTest/R/folder/b.R | 6 ++++++ pkgTest/R/folder/subfolder/c.R | 3 +++ pkgTest/R/zzz.R | 5 +++++ pkgTest/src/d.c | 3 +++ 19 files changed, 210 insertions(+), 13 deletions(-) mode change 100755 => 100644 DESCRIPTION create mode 100644 man/pkgdev.check.Rd create mode 100644 man/pkgdev.clean.Rd create mode 100644 man/pkgdev.ctest.Rd create mode 100644 man/pkgdev.load.Rd create mode 100644 man/pkgdev.rtest.Rd create mode 100644 man/pkgdev.tocran.Rd create mode 100644 man/pkgdev.unload.Rd create mode 100644 man/pkgdev.wipeAll.Rd create mode 100644 pkgTest/DESCRIPTION create mode 100755 pkgTest/NAMESPACE create mode 100644 pkgTest/R/a.R create mode 100644 pkgTest/R/folder/b.R create mode 100644 pkgTest/R/folder/subfolder/c.R create mode 100644 pkgTest/R/zzz.R create mode 100644 pkgTest/src/d.c diff --git a/DESCRIPTION b/DESCRIPTION old mode 100755 new mode 100644 index df83ff4..c324e30 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -5,8 +5,9 @@ Date: 2013-XX-XX Title: Package development helper Author: Benjamin Auder Maintainer: Benjamin Auder -Depends: R (>= 2.15.1) +Depends: + R (>= 2.15.1) Description: Allow nested subfolders in R/ directory, - and somewhat simplify testing process + and somewhat simplify testing process License: GPL (>= 3) LazyLoad: yes diff --git a/R/load.R b/R/load.R index 4f74839..2d6d122 100644 --- a/R/load.R +++ b/R/load.R @@ -18,7 +18,7 @@ if (fileOrDir != forbiddenPath) { if (file.info(fileOrDir)$isdir) { rFiles = list.files(fileOrDir, pattern="\\.[RrSsq]$", - full.names=TRUE, recursive=TRUE) + full.names=TRUE, recursive=TRUE) # NOTE: potential unexported functions are not hidden; # the developer is assumed to handle this lapply(rFiles, source) @@ -33,14 +33,15 @@ # This file tells if the package is currently loaded pkgLoadFile = file.path(pkdev_path,"pkgs",pkgName,"loaded") - + if (file.exists(file.path(path,"src"))) { # C code -- Warning: src/tests folder should not be listed - cFiles = c( - list.files( file.path(path,"src","adapters"), pattern="\\.[cChH]$", - full.names=TRUE, recursive=TRUE ), - list.files( file.path(path,"src","sources"), pattern="\\.[cChH]$", - full.names=TRUE, recursive=TRUE )) + cFiles = list.files( file.path(path,"src"), pattern="\\.[cChH]$", + full.names=TRUE, recursive=TRUE, no..=TRUE ) + cFiles = lapply(cFiles, function(x) { + if (nchar(x)>=5 && substr(x,1,5)=="tests") return ("") + return (x) + }) # Create folder R_HOME_USER/pkgdev/pkgs/pkgName/src (if not existing) dir.create(file.path(pkdev_path,"pkgs",pkgName,"src"), showWarnings=FALSE) @@ -64,7 +65,7 @@ } # Mark package as 'loaded' - writeLines("loaded",pkgLoadFile) + file.create(pkgLoadFile) } # Generate appropriate Makefile under R_HOME_USER/pkgdev/pkgs/pkgName/src diff --git a/R/setup.R b/R/setup.R index e95f9ca..30cecdf 100644 --- a/R/setup.R +++ b/R/setup.R @@ -1,4 +1,4 @@ -# Setup a file structure under R_HOME/pkgdev/ to run later tests +# Setup a file structure under R_HOME_USER/pkgdev/ to run later tests # @param atInstall Logical, TRUE if invoked at package installation .pkgdev.setup = function(reset=FALSE) { @@ -7,7 +7,7 @@ cat("*** WARNING: for pkgdev to work properly, you need to specify\n") cat("*** an environment variable R_HOME_USER in a .Renviron file.\n") cat("*** Standard choice is /home/userName/.R under UNIX systems,\n") - cat("*** or maybe C:/Users/userName/Documents/R under Windows") + cat("*** or maybe C:/Users/userName/Documents/R under Windows\n") stop("Please specify R_HOME_USER before using pkgdev") } diff --git a/README b/README index 1333ed7..be4a6d0 100644 --- a/README +++ b/README @@ -1 +1,36 @@ -TODO +|-------------- +| Basic usage : +|-------------- + +#Install +R CMD INSTALL path/to/pkgdev/folder + +#Launch R +R + +#load library +library(pkgdev) + +#load some package +pkgpath = "path/to/some/package" +pkgdev.load(pkgpath) + +#test it (if unit tests defined under tests/ subfolders) +pkgdev.rtest(pkgpath) +pkgdev.rtest(pkgpath) + +#you can also run its functions +foo(...) +bar(...) + +#reload package to test modifications +pkgdev.load(pkgpath) + +#...and so on + +#finally, unload package +pkgdev.unload(pkgpath) + +--------------------------------- + +Try also pkgTest/ testing package diff --git a/man/pkgdev.check.Rd b/man/pkgdev.check.Rd new file mode 100644 index 0000000..de0a451 --- /dev/null +++ b/man/pkgdev.check.Rd @@ -0,0 +1,14 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\name{pkgdev.check} +\alias{pkgdev.check} +\title{Invoke R CMD check on a flat package (maybe with optional arguments, like --as-cran)} +\usage{ +pkgdev.check(path, opts) +} +\arguments{ +\item{opts}{Vector of strings arguments to pass to R CMD CHECK} +} +\description{ +Invoke R CMD check on a flat package (maybe with optional arguments, like --as-cran) +} + diff --git a/man/pkgdev.clean.Rd b/man/pkgdev.clean.Rd new file mode 100644 index 0000000..339d9e6 --- /dev/null +++ b/man/pkgdev.clean.Rd @@ -0,0 +1,16 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\name{pkgdev.clean} +\alias{pkgdev.clean} +\title{Wipe a specific package under R_HOME_USER/pkgdev/pkgs/ +NOTE: when this package will be loaded again, it will be completely rebuilt} +\usage{ +pkgdev.clean(pkgName) +} +\arguments{ +\item{pkgName}{Name of the package to be removed} +} +\description{ +Wipe a specific package under R_HOME_USER/pkgdev/pkgs/ +NOTE: when this package will be loaded again, it will be completely rebuilt +} + diff --git a/man/pkgdev.ctest.Rd b/man/pkgdev.ctest.Rd new file mode 100644 index 0000000..821bfdb --- /dev/null +++ b/man/pkgdev.ctest.Rd @@ -0,0 +1,18 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\name{pkgdev.ctest} +\alias{pkgdev.ctest} +\title{Launch C unit tests (arbitrary file structure under src/tests), or display the list of test functions} +\usage{ +pkgdev.ctest(path, prefix = "", show = FALSE, cc = "gcc -std=gnu99") +} +\arguments{ +\item{path}{Location of the package containing tests (under /src/tests)} + +\item{prefix}{Prefix for names of the functions to be tested; leave empty to test all (default)} + +\item{show}{Logical, TRUE to display the list of unit tests (default: FALSE)} +} +\description{ +Launch C unit tests (arbitrary file structure under src/tests), or display the list of test functions +} + diff --git a/man/pkgdev.load.Rd b/man/pkgdev.load.Rd new file mode 100644 index 0000000..6e00b05 --- /dev/null +++ b/man/pkgdev.load.Rd @@ -0,0 +1,16 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\name{pkgdev.load} +\alias{pkgdev.load} +\title{Load a package containing arbitrary file structures under R/ and src/{adapters,sources}} +\usage{ +pkgdev.load(path, cc = "gcc -std=gnu99") +} +\arguments{ +\item{path}{Location of the package to load} + +\item{cc}{Compilator to be used (e.g. 'gcc -std=gnu99' [default])} +} +\description{ +Load a package containing arbitrary file structures under R/ and src/{adapters,sources} +} + diff --git a/man/pkgdev.rtest.Rd b/man/pkgdev.rtest.Rd new file mode 100644 index 0000000..3f33f1f --- /dev/null +++ b/man/pkgdev.rtest.Rd @@ -0,0 +1,18 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\name{pkgdev.rtest} +\alias{pkgdev.rtest} +\title{Launch R unit tests (arbitrary file structure under R/tests), or display the list of test functions} +\usage{ +pkgdev.rtest(path, prefix = "", show = FALSE, cc = "gcc -std=gnu99") +} +\arguments{ +\item{path}{Location of the package containing tests (under /R/tests)} + +\item{prefix}{Prefix for names of the functions to be tested; leave empty to test all (default)} + +\item{show}{Logical, TRUE to display the list of unit tests (default: FALSE)} +} +\description{ +Launch R unit tests (arbitrary file structure under R/tests), or display the list of test functions +} + diff --git a/man/pkgdev.tocran.Rd b/man/pkgdev.tocran.Rd new file mode 100644 index 0000000..fdc03f0 --- /dev/null +++ b/man/pkgdev.tocran.Rd @@ -0,0 +1,16 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\name{pkgdev.tocran} +\alias{pkgdev.tocran} +\title{"Flatten" a package: gather all sources under R/ and src/ without hierarchical file structure} +\usage{ +pkgdev.tocran(inPath, outPath = NULL) +} +\arguments{ +\item{inPath}{Input path: location of the package to flatten} + +\item{outPath}{Output path: location of the package to create [default: inPath_cran]} +} +\description{ +"Flatten" a package: gather all sources under R/ and src/ without hierarchical file structure +} + diff --git a/man/pkgdev.unload.Rd b/man/pkgdev.unload.Rd new file mode 100644 index 0000000..337dc55 --- /dev/null +++ b/man/pkgdev.unload.Rd @@ -0,0 +1,14 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\name{pkgdev.unload} +\alias{pkgdev.unload} +\title{Unload a package containing arbitrary file structures under R/ and src/{adapters,sources}} +\usage{ +pkgdev.unload(path) +} +\arguments{ +\item{path}{Location or name of the package to unload} +} +\description{ +Unload a package containing arbitrary file structures under R/ and src/{adapters,sources} +} + diff --git a/man/pkgdev.wipeAll.Rd b/man/pkgdev.wipeAll.Rd new file mode 100644 index 0000000..8dbe733 --- /dev/null +++ b/man/pkgdev.wipeAll.Rd @@ -0,0 +1,13 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\name{pkgdev.wipeAll} +\alias{pkgdev.wipeAll} +\title{Reset pkgdev folder under R_HOME_USER +WARNING: all loaded packages will have to be rebuilt} +\usage{ +pkgdev.wipeAll() +} +\description{ +Reset pkgdev folder under R_HOME_USER +WARNING: all loaded packages will have to be rebuilt +} + diff --git a/pkgTest/DESCRIPTION b/pkgTest/DESCRIPTION new file mode 100644 index 0000000..ad059b8 --- /dev/null +++ b/pkgTest/DESCRIPTION @@ -0,0 +1,11 @@ +Package: pkgTest +Type: Package +Version: 0.1.0 +Date: 2015-01-31 +Title: Just a Testing Package +Author: Benjamin Auder +Maintainer: Benjamin Auder +Depends: R (>= 2.14.1) +Description: testing package for pkgdev +License: GPL (>= 3) +LazyLoad: yes diff --git a/pkgTest/NAMESPACE b/pkgTest/NAMESPACE new file mode 100755 index 0000000..c969d76 --- /dev/null +++ b/pkgTest/NAMESPACE @@ -0,0 +1,4 @@ +# Export all user-level R functions +export (a, b, c, .Last.lib) + +useDynLib(pkgTest) diff --git a/pkgTest/R/a.R b/pkgTest/R/a.R new file mode 100644 index 0000000..05dbee9 --- /dev/null +++ b/pkgTest/R/a.R @@ -0,0 +1,3 @@ +a = function() { + print("Hello World, I'm a()") +} diff --git a/pkgTest/R/folder/b.R b/pkgTest/R/folder/b.R new file mode 100644 index 0000000..3a3854b --- /dev/null +++ b/pkgTest/R/folder/b.R @@ -0,0 +1,6 @@ +b = function() { + print("Hello, I'm b()") + r = 0 + result = .C("d", result = as.integer(r), package="pkg_test")$result + print(paste("The result is ", result)) +} diff --git a/pkgTest/R/folder/subfolder/c.R b/pkgTest/R/folder/subfolder/c.R new file mode 100644 index 0000000..8a5bae3 --- /dev/null +++ b/pkgTest/R/folder/subfolder/c.R @@ -0,0 +1,3 @@ +c = function() { + print("And this is c()") +} diff --git a/pkgTest/R/zzz.R b/pkgTest/R/zzz.R new file mode 100644 index 0000000..415c03a --- /dev/null +++ b/pkgTest/R/zzz.R @@ -0,0 +1,5 @@ +#called when package is detached ( detach("package:pkg_name") ) +.Last.lib = function(path) +{ + library.dynam.unload("pkgTest", path) +} diff --git a/pkgTest/src/d.c b/pkgTest/src/d.c new file mode 100644 index 0000000..686dc56 --- /dev/null +++ b/pkgTest/src/d.c @@ -0,0 +1,3 @@ +void d(int* result) { + *result = 32; +} -- 2.44.0