Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

attempt at Chadwick installation checks; #307 #311

Merged
merged 1 commit into from
Nov 29, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,12 @@ export(bref_daily_batter)
export(bref_daily_pitcher)
export(bref_standings_on_date)
export(bref_team_results)
export(chadwick_find_lib)
export(chadwick_is_installed)
export(chadwick_ld_library_path)
export(chadwick_path)
export(chadwick_player_lu)
export(chadwick_set_ld_library_path)
export(code_barrel)
export(daily_batter_bref)
export(daily_pitcher_bref)
Expand Down
103 changes: 103 additions & 0 deletions R/chadwick_installation.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
#' @title Check Chadwick installation
#' @description
#' Utility functions to help ensure that Chadwick is set up correctly.
#' @return If Chadwick is not installed `NULL`. If Chadwick is installed, the path to the `cwevent` binary.
#' @export
#' @examples
#' chadwick_path()
#'

chadwick_path <- function() {
if (.Platform$OS.type == "windows") {
cmd <- "where"
} else {
cmd <- "which"
}

path <- tryCatch(
system2(cmd, "cwevent", stdout = TRUE),
warning = function(w) {
message("cwevent is not installed. Please see https://github.com/chadwickbureau/chadwick/releases for installation instructions. ")
}
)
if (!is.null(path) && file.exists(path)) {
return(dirname(path))
}
}

#' @rdname chadwick_path
#' @return `TRUE` or `FALSE`
#' @export
#' @examples
#' chadwick_is_installed()
#'

chadwick_is_installed <- function() {
path <- chadwick_path()
!is.null(path) && file.exists(path)
}

#' @rdname chadwick_path
#' @export
#' @return Path to the Chadwick shared library.
#' @examples
#' chadwick_find_lib()

chadwick_find_lib <- function() {
if (!is.null(cw_path <- chadwick_path())) {
system2(
"find",
paste(dirname(cw_path), '-name "libchadwick*"'), stdout = TRUE
) |>
dirname() |>
unique()
}
}

#' @rdname chadwick_path
#' @export

chadwick_set_ld_library_path <- function() {
new_ld_library_path <- paste(
chadwick_find_lib(),
Sys.getenv("LD_LIBRARY_PATH"),
sep = ":"
)
Sys.setenv(LD_LIBRARY_PATH = new_ld_library_path)
}

#' @rdname chadwick_path
#' @description
#' The easiest way for the [Chadwick CLI](https://github.com/chadwickbureau/chadwick/releases)
#' tools to work on *nix systems is to
#' set the `LD_LIBRARY_PATH` environment variable. Unfortunately this environment
#' variable is not set by default during the Chadwick installation.
#'
#' `chadwick_ld_library_path()` checks to find the Chadwick shared libraries, and then
#' set the `LD_LIBRARY_PATH` environment variable.
#' If `chadwick_ld_library_path()` returns `TRUE`, the `cwevent` command line program
#' that \code{\link{retrosheet_data}}
#' depends on should work.
#'
#' The other functions documented here are mostly for internal use.
#'
#' @export
#' @seealso [retrosheet_data()]
#' @examples
#' \dontrun{
#' if (chadwick_ld_library_path()) {
#' retrosheet_data(tempdir())
#' }
#' }

chadwick_ld_library_path <- function() {
old_ld_library_paths <- Sys.getenv("LD_LIBRARY_PATH") |>
stringr::str_split_1(pattern = ":")
if (!chadwick_find_lib() %in% old_ld_library_paths) {
chadwick_set_ld_library_path()
}
new_ld_library_paths <- Sys.getenv("LD_LIBRARY_PATH") |>
stringr::str_split_1(pattern = ":")
chadwick_find_lib() %in% new_ld_library_paths
}

58 changes: 58 additions & 0 deletions man/chadwick_path.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading