Files
homebrew-tap-local/Formula/llhttp.rb
T

60 lines
1.9 KiB
Ruby

class Llhttp < Formula
bottle do
root_url "https://homebrew.hyprnet/bottles"
sha256 cellar: :any, arm64_sequoia: "661a11b740692ce17efa18e0d26d4c77e6e39bcdf0cc0ca53bd9a53ab4a4e71d"
sha256 cellar: :any, arm64_tahoe: "0a3866a86832c768383c04809baccccfa1293a520d3d13654d7c051f12c02c80"
sha256 cellar: :any, x86_64_linux: "064d963ed771884697010f5bee50c78a8f82289cc5b0ff5793c001e5cd7acd27"
end
desc "Port of http_parser to llparse"
homepage "https://llhttp.org/"
url "https://github.com/nodejs/llhttp/archive/refs/tags/release/v9.4.3.tar.gz"
sha256 "1eb813c7437b31a87496a1cd3ed79f00746720f5e7e29c79b42c02cb69f36c39"
license "MIT"
compatibility_version 2
depends_on "cmake" => :build
def install
system "cmake", "-S", ".", "-B", "build", *std_cmake_args
system "cmake", "--build", "build"
system "cmake", "--install", "build"
end
test do
(testpath/"test.c").write <<~'C'
#include <stdio.h>
#include <string.h>
#include <llhttp.h>
int handle_on_message_complete(llhttp_t* parser) {
fprintf(stdout, "Message completed!\n");
return 0;
}
int main(void) {
llhttp_t parser;
llhttp_settings_t settings;
llhttp_settings_init(&settings);
settings.on_message_complete = handle_on_message_complete;
llhttp_init(&parser, HTTP_BOTH, &settings);
const char* request = "GET / HTTP/1.1\r\n\r\n";
int request_len = strlen(request);
enum llhttp_errno err = llhttp_execute(&parser, request, request_len);
if (err == HPE_OK) {
fprintf(stdout, "Successfully parsed!\n");
return 0;
} else {
fprintf(stderr, "Parse error: %s %s\n", llhttp_errno_name(err), llhttp_get_error_reason(&parser));
return 1;
}
}
C
system ENV.cc, "test.c", "-o", "test", "-L#{lib}", "-lllhttp"
assert_equal "Message completed!\nSuccessfully parsed!\n", shell_output("./test")
end
end