diff options
author | polwex <polwex@sortug.com> | 2025-10-05 21:56:51 +0700 |
---|---|---|
committer | polwex <polwex@sortug.com> | 2025-10-05 21:56:51 +0700 |
commit | fcedfddf00b3f994e4f4e40332ac7fc192c63244 (patch) | |
tree | 51d38e62c7bdfcc5f9a5e9435fe820c93cfc9a3d /vere/ext/curl/build.zig |
claude is gud
Diffstat (limited to 'vere/ext/curl/build.zig')
-rw-r--r-- | vere/ext/curl/build.zig | 418 |
1 files changed, 418 insertions, 0 deletions
diff --git a/vere/ext/curl/build.zig b/vere/ext/curl/build.zig new file mode 100644 index 0000000..9ba69f9 --- /dev/null +++ b/vere/ext/curl/build.zig @@ -0,0 +1,418 @@ +const std = @import("std"); + +pub fn build(b: *std.Build) void { + const target = b.standardTargetOptions(.{}); + const optimize = b.standardOptimizeOption(.{}); + + const openssl = b.dependency("openssl", .{ + .target = target, + .optimize = optimize, + }); + + const curl_c = b.dependency("curl", .{ + .target = target, + .optimize = optimize, + }); + + const curl = b.addStaticLibrary(.{ + .name = "curl", + .target = target, + .optimize = optimize, + }); + + curl.linkLibC(); + curl.linkLibrary(openssl.artifact("ssl")); + curl.linkLibrary(openssl.artifact("crypto")); + + curl.root_module.addCMacro("BUILDING_LIBCURL", ""); + curl.root_module.addCMacro("CURL_STATICLIB", "1"); + curl.root_module.addCMacro("USE_OPENSSL", "1"); + curl.root_module.addCMacro("CURL_DISABLE_ALTSVC", "1"); + curl.root_module.addCMacro("CURL_DISABLE_COOKIES", "1"); + curl.root_module.addCMacro("CURL_DISABLE_BASIC_AUTH", "1"); + curl.root_module.addCMacro("CURL_DISABLE_BEARER_AUTH", "1"); + curl.root_module.addCMacro("CURL_DISABLE_DIGEST_AUTH", "1"); + curl.root_module.addCMacro("CURL_DISABLE_KERBEROS_AUTH", "1"); + curl.root_module.addCMacro("CURL_DISABLE_NEGOTIATE_AUTH", "1"); + curl.root_module.addCMacro("CURL_DISABLE_AWS", "1"); + curl.root_module.addCMacro("CURL_DISABLE_DICT", "1"); + curl.root_module.addCMacro("CURL_DISABLE_DOH", "1"); + curl.root_module.addCMacro("CURL_DISABLE_FILE", "1"); + curl.root_module.addCMacro("CURL_DISABLE_FORM_API", "1"); + curl.root_module.addCMacro("CURL_DISABLE_FTP", "1"); + curl.root_module.addCMacro("CURL_DISABLE_GETOPTIONS", "1"); + curl.root_module.addCMacro("CURL_DISABLE_GOPHER", "1"); + // curl.root_module.addCMacro("CURL_DISABLE_HEADERS_API", "1"); + // curl.root_module.addCMacro("CURL_DISABLE_HSTS", "1"); + // curl.root_module.addCMacro("CURL_DISABLE_HTTP", "1"); + curl.root_module.addCMacro("CURL_DISABLE_IMAP", "1"); + curl.root_module.addCMacro("CURL_DISABLE_LDAP", "1"); + curl.root_module.addCMacro("CURL_DISABLE_LDAPS", "1"); + curl.root_module.addCMacro("CURL_DISABLE_LIBCURL_OPTION", "1"); + // curl.root_module.addCMacro("CURL_DISABLE_MIME", "1"); + // curl.root_module.addCMacro("CURL_DISABLE_BINDLOCAL", "1"); + curl.root_module.addCMacro("CURL_DISABLE_MQTT", "1"); + curl.root_module.addCMacro("CURL_DISABLE_NETRC", "1"); + curl.root_module.addCMacro("CURL_DISABLE_NTLM", "1"); + curl.root_module.addCMacro("CURL_DISABLE_PARSEDATE", "1"); + curl.root_module.addCMacro("CURL_DISABLE_POP3", "1"); + curl.root_module.addCMacro("CURL_DISABLE_PROGRESS_METER", "1"); + curl.root_module.addCMacro("CURL_DISABLE_PROXY", "1"); + curl.root_module.addCMacro("CURL_DISABLE_RTSP", "1"); + curl.root_module.addCMacro("CURL_DISABLE_SMB", "1"); + curl.root_module.addCMacro("CURL_DISABLE_SMTP", "1"); + curl.root_module.addCMacro("CURL_DISABLE_SOCKETPAIR", "1"); + curl.root_module.addCMacro("CURL_DISABLE_TELNET", "1"); + curl.root_module.addCMacro("CURL_DISABLE_TFTP", "1"); + curl.root_module.addCMacro("CURL_DISABLE_VERBOSE_STRINGS", "1"); + // curl.root_module.addCMacro("CURL_DISABLE_OPENSSL_AUTO_LOAD_CONFIG", "1"); + + if (target.result.os.tag == .windows) { + curl.linkSystemLibrary("bcrypt"); + } else { + curl.root_module.addCMacro("CURL_EXTERN_SYMBOL", "__attribute__ ((__visibility__ (\"default\"))"); + + const isDarwin = target.result.os.tag.isDarwin(); + if (!isDarwin) + curl.root_module.addCMacro("ENABLE_IPV6", "1"); + curl.root_module.addCMacro("HAVE_ALARM", "1"); + curl.root_module.addCMacro("HAVE_ALLOCA_H", "1"); + curl.root_module.addCMacro("HAVE_ARPA_INET_H", "1"); + curl.root_module.addCMacro("HAVE_ARPA_TFTP_H", "1"); + curl.root_module.addCMacro("HAVE_ASSERT_H", "1"); + curl.root_module.addCMacro("HAVE_BASENAME", "1"); + curl.root_module.addCMacro("HAVE_BOOL_T", "1"); + curl.root_module.addCMacro("HAVE_BUILTIN_AVAILABLE", "1"); + curl.root_module.addCMacro("HAVE_CLOCK_GETTIME_MONOTONIC", "1"); + curl.root_module.addCMacro("HAVE_DLFCN_H", "1"); + curl.root_module.addCMacro("HAVE_ERRNO_H", "1"); + curl.root_module.addCMacro("HAVE_FCNTL", "1"); + curl.root_module.addCMacro("HAVE_FCNTL_H", "1"); + curl.root_module.addCMacro("HAVE_FCNTL_O_NONBLOCK", "1"); + curl.root_module.addCMacro("HAVE_FREEADDRINFO", "1"); + curl.root_module.addCMacro("HAVE_FTRUNCATE", "1"); + curl.root_module.addCMacro("HAVE_GETADDRINFO", "1"); + curl.root_module.addCMacro("HAVE_GETEUID", "1"); + curl.root_module.addCMacro("HAVE_GETPPID", "1"); + curl.root_module.addCMacro("HAVE_GETHOSTBYNAME", "1"); + if (!isDarwin) + curl.root_module.addCMacro("HAVE_GETHOSTBYNAME_R", "1"); + curl.root_module.addCMacro("HAVE_GETHOSTBYNAME_R_6", "1"); + curl.root_module.addCMacro("HAVE_GETHOSTNAME", "1"); + curl.root_module.addCMacro("HAVE_GETPPID", "1"); + curl.root_module.addCMacro("HAVE_GETPROTOBYNAME", "1"); + curl.root_module.addCMacro("HAVE_GETPEERNAME", "1"); + curl.root_module.addCMacro("HAVE_GETSOCKNAME", "1"); + curl.root_module.addCMacro("HAVE_IF_NAMETOINDEX", "1"); + curl.root_module.addCMacro("HAVE_GETPWUID", "1"); + curl.root_module.addCMacro("HAVE_GETPWUID_R", "1"); + curl.root_module.addCMacro("HAVE_GETRLIMIT", "1"); + curl.root_module.addCMacro("HAVE_GETTIMEOFDAY", "1"); + curl.root_module.addCMacro("HAVE_GMTIME_R", "1"); + curl.root_module.addCMacro("HAVE_IFADDRS_H", "1"); + curl.root_module.addCMacro("HAVE_INET_ADDR", "1"); + curl.root_module.addCMacro("HAVE_INET_PTON", "1"); + curl.root_module.addCMacro("HAVE_SA_FAMILY_T", "1"); + curl.root_module.addCMacro("HAVE_INTTYPES_H", "1"); + curl.root_module.addCMacro("HAVE_IOCTL", "1"); + curl.root_module.addCMacro("HAVE_IOCTL_FIONBIO", "1"); + curl.root_module.addCMacro("HAVE_IOCTL_SIOCGIFADDR", "1"); + curl.root_module.addCMacro("HAVE_LDAP_URL_PARSE", "1"); + curl.root_module.addCMacro("HAVE_LIBGEN_H", "1"); + curl.root_module.addCMacro("HAVE_IDN2_H", "1"); + curl.root_module.addCMacro("HAVE_LL", "1"); + curl.root_module.addCMacro("HAVE_LOCALE_H", "1"); + curl.root_module.addCMacro("HAVE_LOCALTIME_R", "1"); + curl.root_module.addCMacro("HAVE_LONGLONG", "1"); + curl.root_module.addCMacro("HAVE_MALLOC_H", "1"); + curl.root_module.addCMacro("HAVE_MEMORY_H", "1"); + if (!isDarwin) + curl.root_module.addCMacro("HAVE_MSG_NOSIGNAL", "1"); + curl.root_module.addCMacro("HAVE_NETDB_H", "1"); + curl.root_module.addCMacro("HAVE_NETINET_IN_H", "1"); + curl.root_module.addCMacro("HAVE_NETINET_TCP_H", "1"); + + if (target.result.os.tag == .linux) + curl.root_module.addCMacro("HAVE_LINUX_TCP_H", "1"); + curl.root_module.addCMacro("HAVE_NET_IF_H", "1"); + curl.root_module.addCMacro("HAVE_PIPE", "1"); + curl.root_module.addCMacro("HAVE_POLL", "1"); + curl.root_module.addCMacro("HAVE_POLL_FINE", "1"); + curl.root_module.addCMacro("HAVE_POLL_H", "1"); + curl.root_module.addCMacro("HAVE_POSIX_STRERROR_R", "1"); + curl.root_module.addCMacro("HAVE_PTHREAD_H", "1"); + curl.root_module.addCMacro("HAVE_PWD_H", "1"); + curl.root_module.addCMacro("HAVE_RECV", "1"); + curl.root_module.addCMacro("HAVE_SELECT", "1"); + curl.root_module.addCMacro("HAVE_SEND", "1"); + curl.root_module.addCMacro("HAVE_FSETXATTR", "1"); + curl.root_module.addCMacro("HAVE_FSETXATTR_5", "1"); + curl.root_module.addCMacro("HAVE_SETJMP_H", "1"); + curl.root_module.addCMacro("HAVE_SETLOCALE", "1"); + curl.root_module.addCMacro("HAVE_SETRLIMIT", "1"); + curl.root_module.addCMacro("HAVE_SETSOCKOPT", "1"); + curl.root_module.addCMacro("HAVE_SIGACTION", "1"); + curl.root_module.addCMacro("HAVE_SIGINTERRUPT", "1"); + curl.root_module.addCMacro("HAVE_SIGNAL", "1"); + curl.root_module.addCMacro("HAVE_SIGNAL_H", "1"); + curl.root_module.addCMacro("HAVE_SIGSETJMP", "1"); + curl.root_module.addCMacro("HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID", "1"); + curl.root_module.addCMacro("HAVE_SOCKET", "1"); + curl.root_module.addCMacro("HAVE_STDBOOL_H", "1"); + curl.root_module.addCMacro("HAVE_STDINT_H", "1"); + curl.root_module.addCMacro("HAVE_STDIO_H", "1"); + curl.root_module.addCMacro("HAVE_STDLIB_H", "1"); + curl.root_module.addCMacro("HAVE_STRCASECMP", "1"); + curl.root_module.addCMacro("HAVE_STRDUP", "1"); + curl.root_module.addCMacro("HAVE_STRERROR_R", "1"); + curl.root_module.addCMacro("HAVE_STRINGS_H", "1"); + curl.root_module.addCMacro("HAVE_STRING_H", "1"); + curl.root_module.addCMacro("HAVE_STRSTR", "1"); + curl.root_module.addCMacro("HAVE_STRTOK_R", "1"); + curl.root_module.addCMacro("HAVE_STRTOLL", "1"); + curl.root_module.addCMacro("HAVE_STRUCT_SOCKADDR_STORAGE", "1"); + curl.root_module.addCMacro("HAVE_STRUCT_TIMEVAL", "1"); + curl.root_module.addCMacro("HAVE_SYS_IOCTL_H", "1"); + curl.root_module.addCMacro("HAVE_SYS_PARAM_H", "1"); + curl.root_module.addCMacro("HAVE_SYS_POLL_H", "1"); + curl.root_module.addCMacro("HAVE_SYS_RESOURCE_H", "1"); + curl.root_module.addCMacro("HAVE_SYS_SELECT_H", "1"); + curl.root_module.addCMacro("HAVE_SYS_SOCKET_H", "1"); + curl.root_module.addCMacro("HAVE_SYS_STAT_H", "1"); + curl.root_module.addCMacro("HAVE_SYS_TIME_H", "1"); + curl.root_module.addCMacro("HAVE_SYS_TYPES_H", "1"); + curl.root_module.addCMacro("HAVE_SYS_UIO_H", "1"); + curl.root_module.addCMacro("HAVE_SYS_UN_H", "1"); + curl.root_module.addCMacro("HAVE_TERMIOS_H", "1"); + curl.root_module.addCMacro("HAVE_TERMIO_H", "1"); + curl.root_module.addCMacro("HAVE_TIME_H", "1"); + curl.root_module.addCMacro("HAVE_UNAME", "1"); + curl.root_module.addCMacro("HAVE_UNISTD_H", "1"); + curl.root_module.addCMacro("HAVE_UTIME", "1"); + curl.root_module.addCMacro("HAVE_UTIMES", "1"); + curl.root_module.addCMacro("HAVE_UTIME_H", "1"); + curl.root_module.addCMacro("HAVE_VARIADIC_MACROS_C99", "1"); + curl.root_module.addCMacro("HAVE_VARIADIC_MACROS_GCC", "1"); + curl.root_module.addCMacro("OS", "\"Linux\""); + curl.root_module.addCMacro("RANDOM_FILE", "\"/dev/urandom\""); + curl.root_module.addCMacro("RECV_TYPE_ARG1", "int"); + curl.root_module.addCMacro("RECV_TYPE_ARG2", "void *"); + curl.root_module.addCMacro("RECV_TYPE_ARG3", "size_t"); + curl.root_module.addCMacro("RECV_TYPE_ARG4", "int"); + curl.root_module.addCMacro("RECV_TYPE_RETV", "ssize_t"); + curl.root_module.addCMacro("SEND_QUAL_ARG2", "const"); + curl.root_module.addCMacro("SEND_TYPE_ARG1", "int"); + curl.root_module.addCMacro("SEND_TYPE_ARG2", "void *"); + curl.root_module.addCMacro("SEND_TYPE_ARG3", "size_t"); + curl.root_module.addCMacro("SEND_TYPE_ARG4", "int"); + curl.root_module.addCMacro("SEND_TYPE_RETV", "ssize_t"); + curl.root_module.addCMacro("SIZEOF_INT", "4"); + curl.root_module.addCMacro("SIZEOF_SHORT", "2"); + curl.root_module.addCMacro("SIZEOF_LONG", "8"); + curl.root_module.addCMacro("SIZEOF_OFF_T", "8"); + curl.root_module.addCMacro("SIZEOF_CURL_OFF_T", "8"); + curl.root_module.addCMacro("SIZEOF_SIZE_T", "8"); + curl.root_module.addCMacro("SIZEOF_TIME_T", "8"); + curl.root_module.addCMacro("STDC_HEADERS", "1"); + curl.root_module.addCMacro("TIME_WITH_SYS_TIME", "1"); + curl.root_module.addCMacro("USE_THREADS_POSIX", "1"); + curl.root_module.addCMacro("USE_UNIX_SOCKETS", ""); + curl.root_module.addCMacro("_FILE_OFFSET_BITS", "64"); + } + + curl.addIncludePath(curl_c.path("lib")); + curl.addIncludePath(curl_c.path("include")); + + curl.addCSourceFiles(.{ + .root = curl_c.path("lib"), + .files = &.{ + "vauth/krb5_sspi.c", + "vauth/spnego_sspi.c", + "vauth/ntlm.c", + "vauth/gsasl.c", + "vauth/spnego_gssapi.c", + "vauth/ntlm_sspi.c", + "vauth/vauth.c", + "vauth/oauth2.c", + "vauth/cram.c", + "vauth/cleartext.c", + "vauth/krb5_gssapi.c", + "vauth/digest.c", + "vauth/digest_sspi.c", + "vquic/vquic.c", + "vquic/curl_ngtcp2.c", + // "vquic/curl_osslq.c", + // "vquic/vquic-tls.c", + "vquic/curl_quiche.c", + "vquic/curl_msh3.c", + "vssh/libssh.c", + "vssh/libssh2.c", + "vssh/wolfssh.c", + // "vtls/mbedtls.c", + "vtls/gtls.c", + "vtls/bearssl.c", + "vtls/hostcheck.c", + "vtls/rustls.c", + "vtls/schannel.c", + "vtls/sectransp.c", + "vtls/schannel_verify.c", + "vtls/vtls.c", + "vtls/cipher_suite.c", + "vtls/keylog.c", + "vtls/openssl.c", + "vtls/wolfssl.c", + "vtls/mbedtls_threadlock.c", + "vtls/x509asn1.c", + "strcase.c", + "easyoptions.c", + "dict.c", + "llist.c", + "mprintf.c", + "pingpong.c", + "socks_gssapi.c", + "psl.c", + "url.c", + "timeval.c", + "curl_get_line.c", + "hmac.c", + "md4.c", + "curl_range.c", + "idn.c", + "hostsyn.c", + "strtok.c", + "curl_threads.c", + "if2ip.c", + "c-hyper.c", + "cf-socket.c", + "http_negotiate.c", + "doh.c", + "curl_endian.c", + "formdata.c", + "easygetopt.c", + "cf-https-connect.c", + "timediff.c", + "dynbuf.c", + "rand.c", + "http2.c", + "request.c", + "dynhds.c", + "content_encoding.c", + "hostip.c", + "escape.c", + "version_win32.c", + "easy.c", + "rename.c", + "share.c", + "slist.c", + "inet_pton.c", + "tftp.c", + "mqtt.c", + "fopen.c", + "socks.c", + "parsedate.c", + "curl_trc.c", + "warnless.c", + "cf-haproxy.c", + "cfilters.c", + "curl_sha512_256.c", + "system_win32.c", + "transfer.c", + "curl_rtmp.c", + "nonblock.c", + "select.c", + "hostip4.c", + "http1.c", + "urlapi.c", + "openldap.c", + "getenv.c", + "hash.c", + "bufq.c", + "http_proxy.c", + "krb5.c", + "multi.c", + "strdup.c", + "mime.c", + "socks_sspi.c", + "smtp.c", + "http_aws_sigv4.c", + "curl_addrinfo.c", + "cf-h2-proxy.c", + "memdebug.c", + "progress.c", + "curl_ntlm_core.c", + "curl_path.c", + "hostasyn.c", + "pop3.c", + "noproxy.c", + "gopher.c", + "rtsp.c", + "curl_gethostname.c", + "curl_des.c", + "base64.c", + "splay.c", + "http.c", + "curl_sspi.c", + "http_chunks.c", + "telnet.c", + "amigaos.c", + "fileinfo.c", + "version.c", + "ldap.c", + "bufref.c", + "curl_sasl.c", + "netrc.c", + "socketpair.c", + "strerror.c", + "curl_multibyte.c", + "altsvc.c", + "conncache.c", + "curl_memrchr.c", + "dllmain.c", + "smb.c", + "sha256.c", + "connect.c", + "ws.c", + "ftp.c", + "strtoofft.c", + "md5.c", + "file.c", + "http_digest.c", + "asyn-thread.c", + "cf-h1-proxy.c", + "hsts.c", + "asyn-ares.c", + "imap.c", + "headers.c", + "macos.c", + "cookie.c", + "hostip6.c", + "sendf.c", + "ftplistparser.c", + "http_ntlm.c", + "setopt.c", + "getinfo.c", + "speedcheck.c", + "inet_ntop.c", + "cw-out.c", + "curl_gssapi.c", + "curl_fnmatch.c", + }, + .flags = &.{ + "-fno-sanitize=all", + "-std=gnu89", + "-Wno-unknown-warning-option", + "-Wswitch-default", + "-Wno-parentheses-equality", + "-Wno-language-extension-token", + "-Wno-extended-offsetof", + "-Wconditional-uninitialized", + "-Wincompatible-pointer-types-discards-qualifiers", + "-Wmissing-variable-declarations", + "-Wno-int-conversion", + }, + }); + + curl.installHeadersDirectory(curl_c.path("include/curl"), "curl", .{}); + + b.installArtifact(curl); +} |