diff --git a/.github/autobump.txt b/.github/autobump.txt index 95d8c17cec2d0..9372ad79661d6 100644 --- a/.github/autobump.txt +++ b/.github/autobump.txt @@ -1698,6 +1698,7 @@ libtrace libtrng libucl libunibreak +libunicode libuninameslist libunistring libunwind diff --git a/Formula/lib/libunicode.rb b/Formula/lib/libunicode.rb new file mode 100644 index 0000000000000..7eefb43983787 --- /dev/null +++ b/Formula/lib/libunicode.rb @@ -0,0 +1,42 @@ +class Libunicode < Formula + desc "Modern C++20 Unicode library" + homepage "https://github.com/contour-terminal/libunicode" + url "https://github.com/contour-terminal/libunicode/archive/refs/tags/v0.6.0.tar.gz" + sha256 "0c217f8264000f1b8c36e78969cb9cf91ac97de937cc141ab78e6b1ad7f404ef" + license "Apache-2.0" + + depends_on "cmake" => :build + + def install + args = %W[ + -DLIBUNICODE_EXAMPLES=OFF + -DLIBUNICODE_TESTING=OFF + -DLIBUNICODE_BENCHMARK=OFF + -DCMAKE_INSTALL_RPATH=#{rpath} + ] + + system "cmake", "-S", ".", "-B", "build", *args, *std_cmake_args + system "cmake", "--build", "build" + system "cmake", "--install", "build" + end + + test do + (testpath/"test.cpp").write <<~EOS + #include + #include + + int main() { + u32_char_t u32_codepoints[] = { 'h', 'e', 'l', 'l', 'o', ' ', 0x1F30D }; + int gc_count = u32_gc_count(u32_codepoints, 7); + std::cout << "Grapheme cluster count: " << gc_count << "\\n"; + + return 0; + } + EOS + + system ENV.cxx, "-std=c++17", "-o", "test", "test.cpp", "-I#{include}", "-L#{lib}", "-lunicode" + assert_match "Grapheme cluster count: 7", shell_output("./test") + + assert_match "HYPHEN", shell_output("#{bin}/unicode-query U+2D") + end +end