process_attributes() processes C level comment attributes. It automates a
number of tasks, such as:
Generation of a src/init.c file. This includes:
Exporting C functions to the R side through the .Call and .External
mechanisms.
Registering C callables for use by other packages.
Optional generation of a pair of package API files in
inst/include/<pkg.c> and inst/include/<pkg.h> for the public callables
registered in the init.c file.
process_attributes() determines the functions to include in the
init.c file through the use of C comments placed directly above the
function of interest and formatted like // [[ export() ]]. See the
sections below for a complete description.
process_attributes(path = ".", debug = FALSE)
| path | 
 The relative file path to the top level of your package.  | 
    
|---|---|
| debug | 
 Should the lines that will be used to construct the   | 
    
A named list of 3 elements: init, api_c, and api_h. These contain the
lines written to their corresponding file. If debug = FALSE, this is
returned invisibly. If debug = TRUE, it is returned visibly and the
lines are not written to file.
Export a C function to the R side as a CallRoutine, suitable for use with
.Call().
// [[ export(name = NA_character_) ]]
name: [character(1)]
A character string with no spaces in the name. Used to override the name that is generated for the R routine object. The default uses the name of the exported C function as the name for the R routine.
Export a C function to the R side as an ExternalRoutine, suitable for use
with .External() or .External2().
// [[ export_external(n, name = NA_character_) ]] // [[ export_external2(n, name = NA_character_) ]]
n: [integer(1)]
The number of arguments expected when calling this routine from the
R side. Meaning that if you have a routine called pkg_my_fun that
you plan to call like .External(pkg_my_fn, arg1, arg2), then you should
pass n = 2.
name: [character(1)]
A character string with no spaces in the name. Used to override the name that is generated for the R routine object. The default uses the name of the exported C function as the name for the R routine.
Register a C function to be callable by other R packages.
// [[ callable(name = NA_character_, hidden = FALSE) ]]
name: [character(1)]
A character string with no spaces in the name. Used to override the name that is generated for the callable object. The default uses the name of the exported C function as the name for the callable.
hidden: [logical(1)]
A logical. Should the registered callable also get an entry in the API
files created in ./inst/include/? The default includes it in the API.
Flipping to hidden = TRUE registers the callable with
R_RegisterCCallable() but does not generate an API entry for it, meaning
that it can only be retrieved by another package's C code by using
R_GetCCallable().
Sometimes you need to initialize extra objects at package load time. By
marking a function with init(), it will get included at the end of the
call to R_init_<pkg>(), which is called whenever the package is loaded.
The function marked with init() should return void and take 1 argument,
a DllInfo*, typically given the variable name dll.
// [[ init() ]]