class Mavsdk < Formula include Language::Python::Virtualenv desc "API and library for MAVLink compatible systems written in C++17" homepage "https://mavsdk.mavlink.io" url "https://github.com/mavlink/MAVSDK.git", tag: "v1.0.8", revision: "a6836be251e216f9967183a7551cc6ccb2a60382" license "BSD-3-Clause" livecheck do url :stable regex(/^v?(\d+(?:\.\d+)+)$/i) end bottle do sha256 cellar: :any, arm64_monterey: "9fb33ff6e74279012e5d391ec47ed52aeca5588a013cc9f65896cc29aaa5b82c" sha256 cellar: :any, arm64_big_sur: "2721c4980c1e09a83ca8ca6f1d0e5ee6cb8c95d07269f3933b73609122ec2761" sha256 cellar: :any, monterey: "4a82d217b82d0a624a359b8be229786543d62c1b80e2c3f8bafae66298a34798" sha256 cellar: :any, big_sur: "b5b21636214f558111908abc90e869d362cc176659b83d1bcdaf58c05fc8c80a" sha256 cellar: :any, catalina: "9a718db425f20936967ce3c349250a0ca512b92c219a3cf0f3a20f10248de918" sha256 cellar: :any_skip_relocation, x86_64_linux: "9f22087ba88278c10f232358634b1463946a379178dc901271c9495e31746821" end depends_on "cmake" => :build depends_on "python@3.9" => :build depends_on "six" => :build depends_on "abseil" depends_on "c-ares" depends_on "curl" depends_on "grpc" depends_on "jsoncpp" depends_on "openssl@1.1" depends_on "protobuf" depends_on "re2" depends_on "tinyxml2" uses_from_macos "zlib" on_macos do depends_on "llvm" if DevelopmentTools.clang_build_version <= 1100 end on_linux do depends_on "gcc" end fails_with :clang do build 1100 cause <<-EOS Undefined symbols for architecture x86_64: "std::__1::__fs::filesystem::__status(std::__1::__fs::filesystem::path const&, std::__1::error_code*)" EOS end fails_with gcc: "5" # To update the resources, use homebrew-pypi-poet on the PyPI package `protoc-gen-mavsdk`. # These resources are needed to install protoc-gen-mavsdk, which we use to regenerate protobuf headers. # This is needed when brewed protobuf is newer than upstream's vendored protobuf. resource "Jinja2" do url "https://files.pythonhosted.org/packages/91/a5/429efc6246119e1e3fbf562c00187d04e83e54619249eb732bb423efa6c6/Jinja2-3.0.3.tar.gz" sha256 "611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7" end resource "MarkupSafe" do url "https://files.pythonhosted.org/packages/bf/10/ff66fea6d1788c458663a84d88787bae15d45daa16f6b3ef33322a51fc7e/MarkupSafe-2.0.1.tar.gz" sha256 "594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a" end def install # Fix version being reported as `v#{version}-dirty` inreplace "CMakeLists.txt", "OUTPUT_VARIABLE VERSION_STR", "OUTPUT_VARIABLE VERSION_STR_IGNORED" ENV.llvm_clang if OS.mac? && (DevelopmentTools.clang_build_version <= 1100) # Install protoc-gen-mavsdk deps venv_dir = buildpath/"bootstrap" venv = virtualenv_create(venv_dir, "python3") venv.pip_install resources # Install protoc-gen-mavsdk venv.pip_install "proto/pb_plugins" # Run generator script in an emulated virtual env. with_env( VIRTUAL_ENV: venv_dir, PATH: "#{venv_dir}/bin:#{ENV["PATH"]}", ) do system "tools/generate_from_protos.sh" end # Source build adapted from # https://mavsdk.mavlink.io/develop/en/contributing/build.html system "cmake", *std_cmake_args, "-Bbuild/default", "-DSUPERBUILD=OFF", "-DBUILD_SHARED_LIBS=ON", "-DBUILD_MAVSDK_SERVER=ON", "-DBUILD_TESTS=OFF", "-DVERSION_STR=v#{version}-#{tap.user}", "-DCMAKE_INSTALL_RPATH=#{rpath}", "-H." system "cmake", "--build", "build/default" system "cmake", "--build", "build/default", "--target", "install" end test do # Force use of Clang on Mojave ENV.clang if OS.mac? (testpath/"test.cpp").write <<~EOS #include #include int main() { mavsdk::Mavsdk mavsdk; std::cout << mavsdk.version() << std::endl; return 0; } EOS system ENV.cxx, "-std=c++17", testpath/"test.cpp", "-o", "test", "-I#{include}", "-L#{lib}", "-lmavsdk" assert_match "v#{version}-#{tap.user}", shell_output("./test").chomp assert_equal "Usage: #{bin}/mavsdk_server [Options] [Connection URL]", shell_output("#{bin}/mavsdk_server --help").split("\n").first end end