| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| |
| # exclude_patterns are regular expressions so use ^ to match top-level |
| # directories only. Otherwise 'dir' will match 'src/dir' and 'dir/file'. |
| rsync <- function(src_dir, dest_dir, exclude_patterns) { |
| all_files <- list.files(src_dir, recursive = TRUE) |
| |
| # Filter out excluded patterns |
| for (pattern in exclude_patterns) { |
| all_files <- all_files[!grepl(pattern, all_files)] |
| } |
| |
| files_to_vendor_src <- file.path(src_dir, all_files) |
| files_to_vendor_dst <- file.path(dest_dir, all_files) |
| |
| # Recreate the directory structure |
| dst_dirs <- unique(dirname(files_to_vendor_dst)) |
| for (dst_dir in dst_dirs) { |
| if (!dir.exists(dst_dir)) { |
| dir.create(dst_dir, recursive = TRUE) |
| } |
| } |
| |
| # Copy the files |
| if (all(file.copy(files_to_vendor_src, files_to_vendor_dst, overwrite = TRUE))) { |
| cat("All files successfully copied to tools/cpp\n") |
| } else { |
| stop("Failed to vendor all files") |
| } |
| } |
| |
| |
| if (dir.exists("../cpp")) { |
| unlink("tools/cpp", recursive = TRUE) |
| rsync( |
| "../cpp", |
| "tools/cpp", |
| exclude_patterns = c( |
| "^apidoc", |
| "^build/", |
| "^build-support/boost-", |
| "^examples", |
| "^submodules", |
| "^src/gandiva", |
| "^src/jni", |
| "^src/arrow/flight/sql/odbc", |
| "_test\\.cc" |
| ) |
| ) |
| |
| # The thirdparty cmake expects .env, NOTICE.txt, and LICENSE.txt to be available one |
| # level up from cpp/ we must rename .env to dotenv and then replace references to it |
| # in cpp/CMakeLists.txt, because R CMD will produce a Note otherwise. |
| file.copy(from = c("../NOTICE.txt", to = "../LICENSE.txt"), "tools/", overwrite = TRUE) |
| file.copy("../.env", "tools/dotenv", overwrite = TRUE) |
| |
| cmake_lists <- readLines("tools/cpp/CMakeLists.txt") |
| cmake_lists <- gsub("\\.env", "dotenv", cmake_lists) |
| writeLines(cmake_lists, "tools/cpp/CMakeLists.txt") |
| } else { |
| cli::cli_alert_warning("Arrow C++ sources not found, skipping bootstrap.") |
| } |