1+ RcppParallel.package.skeleton <- function (name = " anRpackage" ,
2+ example_code = TRUE ,
3+ ... )
4+ {
5+ # call Rcpp.package.skeleton() -- provide 'list' explicitly
6+ # and clean up after
7+ env <- new.env(parent = emptyenv())
8+ env $ dummy <- NULL
9+ Rcpp :: Rcpp.package.skeleton(
10+ name = name ,
11+ attributes = FALSE ,
12+ module = FALSE ,
13+ example_code = FALSE ,
14+ environment = env ,
15+ list = " dummy" ,
16+ ...
17+ )
18+
19+ # move to generated package directory
20+ owd <- setwd(name )
21+ on.exit(setwd(owd ), add = TRUE )
22+
23+ # remove dummy stuff
24+ unlink(" data/dummy.Rda" )
25+ unlink(" man/dummy.Rd" )
26+
27+ message(" \n Adding RcppParallel settings" )
28+
29+ # update DESCRIPTION file
30+ desc <- read.dcf(" DESCRIPTION" , all = TRUE , keep.white = TRUE )
31+ version <- sprintf(" RcppParallel (>= %s)" , utils :: packageVersion(" RcppParallel" ))
32+
33+ desc $ Imports <- paste0(desc $ Imports , " , " , version )
34+ message(" >> added Imports: " , desc $ Imports )
35+
36+ desc $ LinkingTo <- paste0(desc $ LinkingTo , " , RcppParallel" )
37+ message(" >> added LinkingTo: " , desc $ LinkingTo )
38+
39+ desc $ SystemRequirements <- " GNU make"
40+ message(" >> added SystemRequirements: GNU make" )
41+
42+ write.dcf(desc , file = " DESCRIPTION" , keep.white = TRUE )
43+
44+ # update NAMESPACE file
45+ message(" >> added importFrom(RcppParallel,RcppParallelLibs) directive to NAMESPACE" )
46+ cat(" importFrom(RcppParallel,RcppParallelLibs)" ,
47+ file = " NAMESPACE" ,
48+ sep = " \n " ,
49+ append = TRUE )
50+
51+ # write Makevars files
52+ dir.create(" src" , showWarnings = FALSE )
53+
54+ # src/Makevars
55+ message(" >> added src/Makevars" )
56+ cat(
57+ c(
58+ ' CXX_STD = CXX11' ,
59+ ' PKG_LIBS += $(shell ${R_HOME}/bin/Rscript -e "RcppParallel::RcppParallelLibs()")'
60+ ),
61+ file = " src/Makevars" ,
62+ sep = " \n "
63+ )
64+
65+ # src/Makevars.win
66+ message(" >> added src/Makevars.win" )
67+ cat(
68+ c(
69+ ' CXX_STD = CXX11' ,
70+ ' PKG_CXXFLAGS += -DRCPP_PARALLEL_USE_TBB=1' ,
71+ ' PKG_LIBS += $(shell "${R_HOME}/bin${R_ARCH_BIN}/Rscript.exe" -e "RcppParallel::RcppParallelLibs()")'
72+ ),
73+ file = " src/Makevars.win" ,
74+ sep = " \n "
75+ )
76+
77+ # write an example script using RcppParallel
78+ if (example_code ) {
79+
80+ message(" >> added example file src/vector-sum.cpp" )
81+ file.copy(
82+ system.file(" skeleton/vector-sum.cpp" , package = " RcppParallel" ),
83+ " src/vector-sum.cpp"
84+ )
85+
86+ message(" >> added example documentation man/vector-sum.Rd" )
87+ file.copy(
88+ system.file(" skeleton/vector-sum.Rd" , package = " RcppParallel" ),
89+ " man/vector-sum.Rd"
90+ )
91+
92+ message(" >> compiled Rcpp attributes" )
93+ Rcpp :: compileAttributes()
94+ }
95+
96+ TRUE
97+ }
0 commit comments