class Lit < Formula include Language::Python::Virtualenv desc "Portable tool for LLVM- and Clang-style test suites" homepage "https://llvm.org" url "https://files.pythonhosted.org/packages/2f/5e/8b27ba3715becd8ee26f1f0c2ef9d18fa425a9f6bbf535573b90c08171b4/lit-15.0.7.tar.gz" sha256 "ed08ac55afe714a193653df293ae8a6ee6c45d6fb11eeca72ce347d99b88ecc8" license "Apache-2.0" => { with: "LLVM-exception" } bottle do sha256 cellar: :any_skip_relocation, all: "5c7c112e869db56f5f1c798beaab397a789710d2ac650ccefb8c2ce4c960968e" end depends_on "llvm" => :test depends_on "python@3.11" def python3 "python3.11" end def install system python3, *Language::Python.setup_install_args(prefix, python3) # Install symlinks so that `import lit` works with multiple versions of Python python_versions = Formula.names .select { |name| name.start_with? "python@" } .map { |py| py.delete_prefix("python@") } .reject { |xy| xy == Language::Python.major_minor_version(python3) } site_packages = Language::Python.site_packages(python3).delete_prefix("lib/") python_versions.each do |xy| (lib/"python#{xy}/site-packages").install_symlink (lib/site_packages).children end end test do ENV.prepend_path "PATH", Formula["llvm"].opt_bin (testpath/"example.c").write <<~EOS // RUN: cc %s -o %t // RUN: %t | FileCheck %s // CHECK: hello world #include int main() { printf("hello world"); return 0; } EOS (testpath/"lit.site.cfg.py").write <<~EOS import lit.formats config.name = "Example" config.test_format = lit.formats.ShTest(True) config.suffixes = ['.c'] EOS system bin/"lit", "-v", "." if OS.mac? ENV.prepend_path "PYTHONPATH", prefix/Language::Python.site_packages(python3) else python = deps.reject { |d| d.build? || d.test? } .find { |d| d.name.match?(/^python@\d+(\.\d+)*$/) } .to_formula ENV.prepend_path "PATH", python.opt_bin end system python3, "-c", "import lit" end end