The goal of {porter} is to generate port files for rdyncall to support Foreign Function Interface (FFI) for C Libraries in R. It uses CastXML, a C-family abstract syntax tree XML output tool to parse C header files.
You can install porter from CRAN with:
install.packages("porter")You can install the development version of porter from GitHub with:
remotes::install_github("hongyuanjia/porter")porter uses CastXML but does not download or install it. Install
CastXML with your system package manager before calling
port().
scoop install main/castxml.brew install castxml.brew install castxml.locate_castxml() returns the CastXML executable porter
will use. By default it checks Sys.which("castxml"), then
common package-manager paths for Homebrew, Linuxbrew, Scoop, Chocolatey,
and conda. Set options(porter.castxml = ...) to force a
specific executable or installation directory.
library(porter)
locate_castxml()
#> 0.7.0
#> "/opt/homebrew/bin/castxml"Run port() with the path of a C header file:
library(porter)
header <- tempfile(fileext = ".h")
writeLines(c(
"typedef struct Point { int x; double y; } Point;",
"int add(int a, int b);",
"int message(const char *fmt, ...);"
), header)
p <- port(header)
p <- port_set(p,
Package = "Example",
Version = "1.0",
Library = "example"
)
p
#> Package: Example
#> Version: 1.0
#> Library: example
#> Function: add(ii)i a b;
#> Variadic: message(Z)i fmt;
#> FuncPtr: <None>
#> Enum: <None>
#> Struct: Point{id}x y;
#> Union: <None>Use port_write() to save the port file.
port_write(p, file.path(tempdir(), "Example.dynport"))Hongyuan Jia
The project is released under the terms of MIT License.
Copyright © 2023 Hongyuan Jia
Need a high-speed mirror for your open-source project?
Contact our mirror admin team at info@clientvps.com.
This archive is provided as a free public service to the community.
Proudly supported by infrastructure from VPSPulse , RxServers , BuyNumber , UnitVPS , OffshoreName and secure payment technology by ArionPay.