add build.zig

master
LeRoyce Pearson 2024-02-21 12:09:51 -07:00
parent e325e65eb8
commit d6a9539e0c
4 changed files with 3588 additions and 0 deletions

83
build.zig Normal file
View File

@ -0,0 +1,83 @@
const std = @import("std");
const VERSION = std.SemanticVersion{ .major = 1, .minor = 6, .patch = 0 };
pub fn build(b: *std.Build) void {
const target = b.standardTargetOptions(.{});
const optimize = b.standardOptimizeOption(.{});
// const enable_x11 = b.option(bool, "enable-x11", "Whether to enable x11 compatibility");
const xkb_config_root = b.option([]const u8, "xkb-config-root", "Root directory for xkb config") orelse "/usr/share/X11/xkb";
const x_locale_root = b.option([]const u8, "x-locale-root", "x locale root") orelse "/usr/share/X11/locale";
const config_header = b.addConfigHeader(.{}, .{
.EXIT_INVALID_USAGE = @as(i64, 2),
.LIBXKBCOMMON_VERSION = b.fmt("\"{}\"", .{VERSION}),
.DFLT_XKB_CONFIG_ROOT = xkb_config_root,
.DFLT_XKB_CONFIG_EXTRA_PATH = b.fmt("\"{s}\"", .{"/usr/share/xkb"}),
.XLOCALEDIR = b.fmt("\"{s}\"", .{x_locale_root}),
.DEFAULT_XKB_RULES = "\"evdev\"",
.DEFAULT_XKB_MODEL = "\"pc105\"",
.DEFAULT_XKB_LAYOUT = "\"us\"",
.DEFAULT_XKB_VARIANT = "NULL",
.DEFAULT_XKB_OPTIONS = "NULL",
.HAVE_STRNDUP = @as(i64, 1),
.HAVE_MMAP = @as(i64, 1),
});
// _ = b.run(&.{ "bison", "--defines=src/xkbcomp/parser.h", "-o", "src/xkbcomp/parser.c", "-p", "_xkbcommon_", "src/xkbcomp/parser.y" });
const lib = b.addStaticLibrary(.{
.name = "xkbcommon",
.target = target,
.optimize = optimize,
});
lib.root_module.c_std = .C11;
lib.addConfigHeader(config_header);
lib.addCSourceFiles(.{
.files = &.{
"src/compose/parser.c",
"src/compose/paths.c",
"src/compose/state.c",
"src/compose/table.c",
"src/xkbcomp/action.c",
"src/xkbcomp/ast-build.c",
"src/xkbcomp/compat.c",
"src/xkbcomp/expr.c",
"src/xkbcomp/include.c",
"src/xkbcomp/keycodes.c",
"src/xkbcomp/keymap.c",
"src/xkbcomp/keymap-dump.c",
"src/xkbcomp/keywords.c",
"src/xkbcomp/parser.c",
"src/xkbcomp/rules.c",
"src/xkbcomp/scanner.c",
"src/xkbcomp/symbols.c",
"src/xkbcomp/types.c",
"src/xkbcomp/vmod.c",
"src/xkbcomp/xkbcomp.c",
"src/atom.c",
"src/context.c",
"src/context-priv.c",
"src/keysym.c",
"src/keysym-utf.c",
"src/keymap.c",
"src/keymap-priv.c",
"src/state.c",
"src/text.c",
"src/utf8.c",
"src/utils.c",
},
});
lib.installHeadersDirectoryOptions(.{
.source_dir = .{ .path = "include/xkbcommon" },
.install_dir = .header,
.install_subdir = "xkbcommon",
});
lib.addIncludePath(.{ .path = "src" });
lib.addIncludePath(.{ .path = "include/" });
lib.linkLibC();
b.installArtifact(lib);
}

60
build.zig.zon Normal file
View File

@ -0,0 +1,60 @@
.{
.name = "libxkbcommon",
.version = "1.6.0",
// This field is optional.
// This is currently advisory only; Zig does not yet do anything
// with this value.
//.minimum_zig_version = "0.11.0",
// This field is optional.
// Each dependency must either provide a `url` and `hash`, or a `path`.
// `zig build --fetch` can be used to fetch all dependencies of a package, recursively.
// Once all dependencies are fetched, `zig build` no longer requires
// internet connectivity.
.dependencies = .{
// See `zig fetch --save <url>` for a command-line interface for adding dependencies.
//.example = .{
// // When updating this field to a new URL, be sure to delete the corresponding
// // `hash`, otherwise you are communicating that you expect to find the old hash at
// // the new URL.
// .url = "https://example.com/foo.tar.gz",
//
// // This is computed from the file contents of the directory of files that is
// // obtained after fetching `url` and applying the inclusion rules given by
// // `paths`.
// //
// // This field is the source of truth; packages do not come from a `url`; they
// // come from a `hash`. `url` is just one of many possible mirrors for how to
// // obtain a package matching this `hash`.
// //
// // Uses the [multihash](https://multiformats.io/multihash/) format.
// .hash = "...",
//
// // When this is provided, the package is found in a directory relative to the
// // build root. In this case the package's hash is irrelevant and therefore not
// // computed. This field and `url` are mutually exclusive.
// .path = "foo",
//},
},
// Specifies the set of files and directories that are included in this package.
// Only files and directories listed here are included in the `hash` that
// is computed for this package.
// Paths are relative to the build root. Use the empty string (`""`) to refer to
// the build root itself.
// A directory listed here means that all files within, recursively, are included.
.paths = .{
// This makes *all* files, recursively, included in this package. It is generally
// better to explicitly list the files and directories instead, to insure that
// fetching from tarballs, file system paths, and version control all result
// in the same contents hash.
"",
// For example...
//"build.zig",
//"build.zig.zon",
//"src",
//"LICENSE",
//"README.md",
},
}

3274
src/xkbcomp/parser.c Normal file

File diff suppressed because it is too large Load Diff

171
src/xkbcomp/parser.h Normal file
View File

@ -0,0 +1,171 @@
/* A Bison parser, made by GNU Bison 3.8.2. */
/* Bison interface for Yacc-like parsers in C
Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* As a special exception, you may create a larger work that contains
part or all of the Bison parser skeleton and distribute that work
under terms of your choice, so long as that work isn't itself a
parser generator using the skeleton or a modified version thereof
as a parser skeleton. Alternatively, if you modify or redistribute
the parser skeleton itself, you may (at your option) remove this
special exception, which will cause the skeleton and the resulting
Bison output files to be licensed under the GNU General Public
License without this special exception.
This special exception was added by the Free Software Foundation in
version 2.2 of Bison. */
/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
especially those whose name start with YY_ or yy_. They are
private implementation details that can be changed or removed. */
#ifndef YY__XKBCOMMON_SRC_XKBCOMP_PARSER_H_INCLUDED
# define YY__XKBCOMMON_SRC_XKBCOMP_PARSER_H_INCLUDED
/* Debug traces. */
#ifndef YYDEBUG
# define YYDEBUG 0
#endif
#if YYDEBUG
extern int _xkbcommon_debug;
#endif
/* Token kinds. */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
enum yytokentype
{
YYEMPTY = -2,
END_OF_FILE = 0, /* END_OF_FILE */
YYerror = 256, /* error */
YYUNDEF = 257, /* "invalid token" */
ERROR_TOK = 255, /* ERROR_TOK */
XKB_KEYMAP = 1, /* XKB_KEYMAP */
XKB_KEYCODES = 2, /* XKB_KEYCODES */
XKB_TYPES = 3, /* XKB_TYPES */
XKB_SYMBOLS = 4, /* XKB_SYMBOLS */
XKB_COMPATMAP = 5, /* XKB_COMPATMAP */
XKB_GEOMETRY = 6, /* XKB_GEOMETRY */
XKB_SEMANTICS = 7, /* XKB_SEMANTICS */
XKB_LAYOUT = 8, /* XKB_LAYOUT */
INCLUDE = 10, /* INCLUDE */
OVERRIDE = 11, /* OVERRIDE */
AUGMENT = 12, /* AUGMENT */
REPLACE = 13, /* REPLACE */
ALTERNATE = 14, /* ALTERNATE */
VIRTUAL_MODS = 20, /* VIRTUAL_MODS */
TYPE = 21, /* TYPE */
INTERPRET = 22, /* INTERPRET */
ACTION_TOK = 23, /* ACTION_TOK */
KEY = 24, /* KEY */
ALIAS = 25, /* ALIAS */
GROUP = 26, /* GROUP */
MODIFIER_MAP = 27, /* MODIFIER_MAP */
INDICATOR = 28, /* INDICATOR */
SHAPE = 29, /* SHAPE */
KEYS = 30, /* KEYS */
ROW = 31, /* ROW */
SECTION = 32, /* SECTION */
OVERLAY = 33, /* OVERLAY */
TEXT = 34, /* TEXT */
OUTLINE = 35, /* OUTLINE */
SOLID = 36, /* SOLID */
LOGO = 37, /* LOGO */
VIRTUAL = 38, /* VIRTUAL */
EQUALS = 40, /* EQUALS */
PLUS = 41, /* PLUS */
MINUS = 42, /* MINUS */
DIVIDE = 43, /* DIVIDE */
TIMES = 44, /* TIMES */
OBRACE = 45, /* OBRACE */
CBRACE = 46, /* CBRACE */
OPAREN = 47, /* OPAREN */
CPAREN = 48, /* CPAREN */
OBRACKET = 49, /* OBRACKET */
CBRACKET = 50, /* CBRACKET */
DOT = 51, /* DOT */
COMMA = 52, /* COMMA */
SEMI = 53, /* SEMI */
EXCLAM = 54, /* EXCLAM */
INVERT = 55, /* INVERT */
STRING = 60, /* STRING */
INTEGER = 61, /* INTEGER */
FLOAT = 62, /* FLOAT */
IDENT = 63, /* IDENT */
KEYNAME = 64, /* KEYNAME */
PARTIAL = 70, /* PARTIAL */
DEFAULT = 71, /* DEFAULT */
HIDDEN = 72, /* HIDDEN */
ALPHANUMERIC_KEYS = 73, /* ALPHANUMERIC_KEYS */
MODIFIER_KEYS = 74, /* MODIFIER_KEYS */
KEYPAD_KEYS = 75, /* KEYPAD_KEYS */
FUNCTION_KEYS = 76, /* FUNCTION_KEYS */
ALTERNATE_GROUP = 77 /* ALTERNATE_GROUP */
};
typedef enum yytokentype yytoken_kind_t;
#endif
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
union YYSTYPE
{
#line 165 "src/xkbcomp/parser.y"
int64_t num;
enum xkb_file_type file_type;
char *str;
xkb_atom_t atom;
enum merge_mode merge;
enum xkb_map_flags mapFlags;
xkb_keysym_t keysym;
ParseCommon *any;
struct { ParseCommon *head; ParseCommon *last; } anyList;
ExprDef *expr;
struct { ExprDef *head; ExprDef *last; } exprList;
VarDef *var;
struct { VarDef *head; VarDef *last; } varList;
VModDef *vmod;
struct { VModDef *head; VModDef *last; } vmodList;
InterpDef *interp;
KeyTypeDef *keyType;
SymbolsDef *syms;
ModMapDef *modMask;
GroupCompatDef *groupCompat;
LedMapDef *ledMap;
LedNameDef *ledName;
KeycodeDef *keyCode;
KeyAliasDef *keyAlias;
void *geom;
XkbFile *file;
struct { XkbFile *head; XkbFile *last; } fileList;
#line 158 "src/xkbcomp/parser.h"
};
typedef union YYSTYPE YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define YYSTYPE_IS_DECLARED 1
#endif
int _xkbcommon_parse (struct parser_param *param);
#endif /* !YY__XKBCOMMON_SRC_XKBCOMP_PARSER_H_INCLUDED */