diff options
| author | Can Celik <ogulcancelik@gmail.com> | 2026-04-04 19:22:04 +0300 |
|---|---|---|
| committer | Can Celik <ogulcancelik@gmail.com> | 2026-04-05 01:23:06 +0300 |
| commit | 41dd733ca7123c9ac4bfc6c781697a660e95b052 (patch) | |
| tree | 3fc91815ca139ef2e0b281bba0abda4ef15175f4 /vendor/libghostty-vt/pkg/libxml2 | |
| parent | 55c138263e190a1e79d4b997bfb9397306c0ec1f (diff) | |
feat: finish ghostty pane backend integration
Diffstat (limited to 'vendor/libghostty-vt/pkg/libxml2')
5 files changed, 358 insertions, 0 deletions
diff --git a/vendor/libghostty-vt/pkg/libxml2/build.zig b/vendor/libghostty-vt/pkg/libxml2/build.zig new file mode 100644 index 00000000..a9b3e4b1 --- /dev/null +++ b/vendor/libghostty-vt/pkg/libxml2/build.zig @@ -0,0 +1,227 @@ +const std = @import("std"); + +pub fn build(b: *std.Build) !void { + const target = b.standardTargetOptions(.{}); + const optimize = b.standardOptimizeOption(.{}); + + const upstream_ = b.lazyDependency("libxml2", .{}); + + const lib = b.addLibrary(.{ + .name = "xml2", + .root_module = b.createModule(.{ + .target = target, + .optimize = optimize, + }), + .linkage = .static, + }); + lib.linkLibC(); + + if (upstream_) |upstream| lib.addIncludePath(upstream.path("include")); + lib.addIncludePath(b.path("override/include")); + if (target.result.os.tag == .windows) { + lib.addIncludePath(b.path("override/config/win32")); + lib.linkSystemLibrary("ws2_32"); + } else { + lib.addIncludePath(b.path("override/config/posix")); + } + + var flags: std.ArrayList([]const u8) = .empty; + defer flags.deinit(b.allocator); + try flags.appendSlice(b.allocator, &.{ + // Version info, hardcoded + comptime "-DLIBXML_VERSION=" ++ Version.number(), + comptime "-DLIBXML_VERSION_STRING=" ++ Version.string(), + "-DLIBXML_VERSION_EXTRA=\"\"", + comptime "-DLIBXML_DOTTED_VERSION=" ++ Version.dottedString(), + + // These might now always be true (particularly Windows) but for + // now we just set them all. We should do some detection later. + "-DSEND_ARG2_CAST=", + "-DGETHOSTBYNAME_ARG_CAST=", + "-DGETHOSTBYNAME_ARG_CAST_CONST=", + + // Always on + "-DLIBXML_STATIC=1", + "-DLIBXML_AUTOMATA_ENABLED=1", + "-DWITHOUT_TRIO=1", + }); + if (target.result.os.tag != .windows) { + try flags.appendSlice(b.allocator, &.{ + "-DHAVE_ARPA_INET_H=1", + "-DHAVE_ARPA_NAMESER_H=1", + "-DHAVE_DL_H=1", + "-DHAVE_NETDB_H=1", + "-DHAVE_NETINET_IN_H=1", + "-DHAVE_PTHREAD_H=1", + "-DHAVE_SHLLOAD=1", + "-DHAVE_SYS_DIR_H=1", + "-DHAVE_SYS_MMAN_H=1", + "-DHAVE_SYS_NDIR_H=1", + "-DHAVE_SYS_SELECT_H=1", + "-DHAVE_SYS_SOCKET_H=1", + "-DHAVE_SYS_TIMEB_H=1", + "-DHAVE_SYS_TIME_H=1", + "-DHAVE_SYS_TYPES_H=1", + }); + } + + // Enable our `./configure` options. For bool-type fields we translate + // it to the `LIBXML_{field}_ENABLED` C define where field is uppercased. + inline for (std.meta.fields(Options)) |field| { + const opt = b.option(bool, field.name, "Configure flag") orelse + @as(*const bool, @ptrCast(field.default_value_ptr.?)).*; + if (opt) { + var nameBuf: [32]u8 = undefined; + const name = std.ascii.upperString(&nameBuf, field.name); + const define = try std.fmt.allocPrint(b.allocator, "-DLIBXML_{s}_ENABLED=1", .{name}); + try flags.append(b.allocator, define); + + if (std.mem.eql(u8, field.name, "history")) { + try flags.appendSlice(b.allocator, &.{ + "-DHAVE_LIBHISTORY=1", + "-DHAVE_LIBREADLINE=1", + }); + } + if (std.mem.eql(u8, field.name, "mem_debug")) { + try flags.append(b.allocator, "-DDEBUG_MEMORY_LOCATION=1"); + } + if (std.mem.eql(u8, field.name, "regexp")) { + try flags.append(b.allocator, "-DLIBXML_UNICODE_ENABLED=1"); + } + if (std.mem.eql(u8, field.name, "run_debug")) { + try flags.append(b.allocator, "-DLIBXML_DEBUG_RUNTIME=1"); + } + if (std.mem.eql(u8, field.name, "thread")) { + try flags.append(b.allocator, "-DHAVE_LIBPTHREAD=1"); + } + } + } + + if (upstream_) |upstream| { + lib.addCSourceFiles(.{ + .root = upstream.path(""), + .files = srcs, + .flags = flags.items, + }); + + lib.installHeader( + b.path("override/include/libxml/xmlversion.h"), + "libxml/xmlversion.h", + ); + lib.installHeadersDirectory( + upstream.path("include"), + "", + .{ .include_extensions = &.{".h"} }, + ); + } + + b.installArtifact(lib); +} + +/// The version information for this library. This is hardcoded for now but +/// in the future we will parse this from configure.ac. +pub const Version = struct { + pub const major = "2"; + pub const minor = "11"; + pub const micro = "5"; + + pub fn number() []const u8 { + return comptime major ++ "0" ++ minor ++ "0" ++ micro; + } + + pub fn string() []const u8 { + return comptime "\"" ++ number() ++ "\""; + } + + pub fn dottedString() []const u8 { + return comptime "\"" ++ major ++ "." ++ minor ++ "." ++ micro ++ "\""; + } +}; + +/// Compile-time options for the library. These mostly correspond to +/// options exposed by the native build system used by the library. +/// These are mapped to `b.option` calls. +const Options = struct { + // These options are all defined in libxml2's configure.c and correspond + // to `--with-X` options for `./configure`. Their defaults are properly set. + c14n: bool = true, + catalog: bool = true, + debug: bool = true, + ftp: bool = false, + history: bool = true, + html: bool = true, + iconv: bool = true, + icu: bool = false, + iso8859x: bool = true, + legacy: bool = false, + mem_debug: bool = false, + minimum: bool = true, + output: bool = true, + pattern: bool = true, + push: bool = true, + reader: bool = true, + regexp: bool = true, + run_debug: bool = false, + sax1: bool = true, + schemas: bool = true, + schematron: bool = true, + thread: bool = true, + thread_alloc: bool = false, + tree: bool = true, + valid: bool = true, + writer: bool = true, + xinclude: bool = true, + xpath: bool = true, + xptr: bool = true, + xptr_locs: bool = false, + modules: bool = true, + lzma: bool = false, + zlib: bool = false, +}; + +const srcs = &.{ + "buf.c", + "c14n.c", + "catalog.c", + "chvalid.c", + "debugXML.c", + "dict.c", + "encoding.c", + "entities.c", + "error.c", + "globals.c", + "hash.c", + "HTMLparser.c", + "HTMLtree.c", + "legacy.c", + "list.c", + "nanoftp.c", + "nanohttp.c", + "parser.c", + "parserInternals.c", + "pattern.c", + "relaxng.c", + "SAX.c", + "SAX2.c", + "schematron.c", + "threads.c", + "tree.c", + "uri.c", + "valid.c", + "xinclude.c", + "xlink.c", + "xmlIO.c", + "xmlmemory.c", + "xmlmodule.c", + "xmlreader.c", + "xmlregexp.c", + "xmlsave.c", + "xmlschemas.c", + "xmlschemastypes.c", + "xmlstring.c", + "xmlunicode.c", + "xmlwriter.c", + "xpath.c", + "xpointer.c", + "xzlib.c", +}; diff --git a/vendor/libghostty-vt/pkg/libxml2/build.zig.zon b/vendor/libghostty-vt/pkg/libxml2/build.zig.zon new file mode 100644 index 00000000..f932835a --- /dev/null +++ b/vendor/libghostty-vt/pkg/libxml2/build.zig.zon @@ -0,0 +1,13 @@ +.{ + .name = .libxml2, + .version = "2.11.5", + .fingerprint = 0xf268267b0b8b040d, + .paths = .{""}, + .dependencies = .{ + .libxml2 = .{ + .url = "https://deps.files.ghostty.org/libxml2-2.11.5.tar.gz", + .hash = "N-V-__8AAG3RoQEyRC2Vw7Qoro5SYBf62IHn3HjqtNVY6aWK", + .lazy = true, + }, + }, +} diff --git a/vendor/libghostty-vt/pkg/libxml2/override/config/posix/config.h b/vendor/libghostty-vt/pkg/libxml2/override/config/posix/config.h new file mode 100644 index 00000000..44228498 --- /dev/null +++ b/vendor/libghostty-vt/pkg/libxml2/override/config/posix/config.h @@ -0,0 +1,80 @@ +// This recreates parts of the generated config.h from cmake. Most of the +// defines actually happen directly in libxml2.zig. Some of these SHOULD +// be converted to build-time determined. + +/* Whether struct sockaddr::__ss_family exists */ +// #define HAVE_BROKEN_SS_FAMILY 1 + +/* Define to 1 if you have the <dlfcn.h> header file. */ +#define HAVE_DLFCN_H 1 + +/* Have dlopen based dso */ +#define HAVE_DLOPEN 1 + +/* Define to 1 if you have the <fcntl.h> header file. */ +#define HAVE_FCNTL_H 1 + +/* Define to 1 if you have the `ftime' function. */ +#define HAVE_FTIME 1 + +/* Define if getaddrinfo is there */ +#define HAVE_GETADDRINFO 1 + +/* Define to 1 if you have the `gettimeofday' function. */ +#define HAVE_GETTIMEOFDAY 1 + +/* Define to 1 if you have the <inttypes.h> header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the `isascii' function. */ +#define HAVE_ISASCII 1 + +/* Define to 1 if you have the `mmap' function. */ +#define HAVE_MMAP 1 + +/* Define to 1 if you have the `munmap' function. */ +#define HAVE_MUNMAP 1 + +/* mmap() is no good without munmap() */ +#if defined(HAVE_MMAP) && !defined(HAVE_MUNMAP) +# undef /**/ HAVE_MMAP +#endif + +/* Define to 1 if you have the <poll.h> header file. */ +#define HAVE_POLL_H 1 + +/* Define to 1 if you have the `putenv' function. */ +#define HAVE_PUTENV 1 + +/* Define to 1 if you have the `rand_r' function. */ +#define HAVE_RAND_R 1 + +/* Define to 1 if you have the <resolv.h> header file. */ +#define HAVE_RESOLV_H 1 + +/* Define to 1 if you have the `stat' function. */ +#define HAVE_STAT 1 + +/* Define to 1 if you have the <stdint.h> header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the <sys/stat.h> header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the <unistd.h> header file. */ +#define HAVE_UNISTD_H 1 + +/* Whether va_copy() is available */ +#define HAVE_VA_COPY 1 + +/* Define to 1 if you have the <zlib.h> header file. */ +#define HAVE_ZLIB_H 1 + +/* Whether __va_copy() is available */ +#define HAVE___VA_COPY 1 + +/* Support for IPv6 */ +#define SUPPORT_IP6 1 + +/* Define if va_list is an array type */ +#define VA_LIST_IS_ARRAY 1 diff --git a/vendor/libghostty-vt/pkg/libxml2/override/config/win32/config.h b/vendor/libghostty-vt/pkg/libxml2/override/config/win32/config.h new file mode 100644 index 00000000..5108d08c --- /dev/null +++ b/vendor/libghostty-vt/pkg/libxml2/override/config/win32/config.h @@ -0,0 +1,20 @@ +#ifndef __LIBXML_WIN32_CONFIG__ +#define __LIBXML_WIN32_CONFIG__ + +#define SEND_ARG2_CAST +#define GETHOSTBYNAME_ARG_CAST + +#define HAVE_SYS_STAT_H +#define HAVE_STAT +#define HAVE_FCNTL_H + +#if defined(__MINGW32__) || (defined(_MSC_VER) && _MSC_VER >= 1600) +#define HAVE_STDINT_H +#endif + +#if defined(_MSC_VER) && _MSC_VER < 1900 +#define snprintf _snprintf +#define vsnprintf _vsnprintf +#endif + +#endif /* __LIBXML_WIN32_CONFIG__ */ diff --git a/vendor/libghostty-vt/pkg/libxml2/override/include/libxml/xmlversion.h b/vendor/libghostty-vt/pkg/libxml2/override/include/libxml/xmlversion.h new file mode 100644 index 00000000..039d704d --- /dev/null +++ b/vendor/libghostty-vt/pkg/libxml2/override/include/libxml/xmlversion.h @@ -0,0 +1,18 @@ +// This recreates parts of the generated libxml/xmlversion.h.in that we need +// to build libxml2 without actually templating the header file. We define most +// of the defines in that file using flags to the compiler in libxml2.zig + +#ifndef __XML_VERSION_H__ +#define __XML_VERSION_H__ + +#include <libxml/xmlexports.h> + +// We are not GCC. +#define XML_IGNORE_FPTR_CAST_WARNINGS +#define XML_POP_WARNINGS +#define LIBXML_ATTR_FORMAT(fmt,args) +#define LIBXML_ATTR_ALLOC_SIZE(x) +#define ATTRIBUTE_UNUSED +#define XML_DEPRECATED + +#endif |
