class Vineyard < Formula include Language::Python::Virtualenv desc "In-memory immutable data manager. (Project under CNCF)" homepage "https://v6d.io" url "https://github.com/v6d-io/v6d/releases/download/v0.9.0/v6d-0.9.0.tar.gz" sha256 "bd1e5ba09c162e1ff046266644bf18065a50ee1a4ad1def483cab62051cadb03" license "Apache-2.0" revision 2 bottle do sha256 arm64_monterey: "5251ebdbab866955e6c9dccdb37deed2dc4f2c2e455b2b5dc74319ec1c3b6dfe" sha256 arm64_big_sur: "1b8438b17377c29ae5ecd36d7c007e2771941a40d839249470c0a31b81aa6c5a" sha256 monterey: "6aaaa19507fb2b6624c723588712307f21e0dedb34bf4576aced8eb8413b1844" sha256 big_sur: "4c054029f7f071bbb9fa396579786fa06a291080b0a004ad3f9f3ed373ec1f46" sha256 catalina: "270d2acdce8bb593412b9b3a3ad2e74571eaa23adb4acb121ef50146eb566706" sha256 x86_64_linux: "f79233e1c606de4043794738767b1190fa4d790ae115ea6ceae3c87d54ac54bf" end depends_on "cmake" => :build depends_on "python@3.10" => :build depends_on "apache-arrow" depends_on "boost" depends_on "etcd" depends_on "etcd-cpp-apiv3" depends_on "gflags" depends_on "glog" depends_on "libgrape-lite" depends_on "llvm" depends_on "nlohmann-json" depends_on "open-mpi" depends_on "openssl@1.1" depends_on "tbb" fails_with gcc: "5" def install python = "python3.10" # LLVM is keg-only. ENV.prepend_path "PYTHONPATH", Formula["llvm"].opt_prefix/Language::Python.site_packages(python) system "cmake", "-S", ".", "-B", "build", "-DCMAKE_CXX_STANDARD=14", "-DCMAKE_CXX_STANDARD_REQUIRED=TRUE", "-DPYTHON_EXECUTABLE=#{which(python)}", "-DUSE_EXTERNAL_ETCD_LIBS=ON", "-DUSE_EXTERNAL_TBB_LIBS=ON", "-DUSE_EXTERNAL_NLOHMANN_JSON_LIBS=ON", "-DBUILD_VINEYARD_TESTS=OFF", "-DOPENSSL_ROOT_DIR=#{Formula["openssl@1.1"].opt_prefix}", *std_cmake_args system "cmake", "--build", "build" system "cmake", "--install", "build" end test do (testpath/"test.cc").write <<~EOS #include #include #include int main(int argc, char **argv) { vineyard::Client client; VINEYARD_CHECK_OK(client.Connect(argv[1])); std::shared_ptr status; VINEYARD_CHECK_OK(client.InstanceStatus(status)); std::cout << "vineyard instance is: " << status->instance_id << std::endl; return 0; } EOS system ENV.cxx, "test.cc", "-std=c++17", "-I#{Formula["apache-arrow"].include}", "-I#{Formula["boost"].include}", "-I#{include}", "-I#{include}/vineyard", "-I#{include}/vineyard/contrib", "-L#{Formula["apache-arrow"].lib}", "-L#{Formula["boost"].lib}", "-L#{lib}", "-larrow", "-lboost_thread-mt", "-lboost_system-mt", "-lvineyard_client", "-o", "test_vineyard_client" # prepare vineyardd vineyardd_pid = spawn bin/"vineyardd", "--norpc", "--meta=local", "--socket=#{testpath}/vineyard.sock" # sleep to let vineyardd get its wits about it sleep 10 assert_equal("vineyard instance is: 0\n", shell_output("./test_vineyard_client #{testpath}/vineyard.sock")) ensure # clean up the vineyardd process before we leave Process.kill("HUP", vineyardd_pid) end end