Add zig build system

This commit is contained in:
mr6r4y 2024-01-17 10:47:49 +02:00
parent c4df45b7e4
commit 74a866f08e
2 changed files with 174 additions and 0 deletions

3
.gitignore vendored
View File

@ -21,3 +21,6 @@ cscope.out
compile
*~
tags
zig-cache/
zig-out/

171
build.zig Normal file
View File

@ -0,0 +1,171 @@
const std = @import("std");
fn getVersionFromFile() ![]u8 {
const file = try std.fs.cwd().openFile(
"VERSION",
.{},
);
defer file.close();
const len = 32;
var buffer: [len]u8 = undefined;
try file.seekTo(0);
const bytes_read = try file.readAll(&buffer);
return buffer[0..@min(len, bytes_read)];
}
fn getVersionFromGit(allocator: std.mem.Allocator) ![]u8 {
const args = [_][]const u8{
"bash",
"scripts/version.sh",
};
const t = try std.ChildProcess.exec(.{
.allocator = allocator,
.argv = &args,
.max_output_bytes = 128,
});
defer {
allocator.free(t.stdout);
allocator.free(t.stderr);
}
const result = try allocator.alloc(u8, t.stdout.len);
@memcpy(result, t.stdout);
return result;
}
pub fn build(b: *std.Build) !void {
const optimize = b.standardOptimizeOption(.{});
const target = b.standardTargetOptions(.{});
const allocator = b.allocator;
const version: []u8 = try getVersionFromGit(allocator);
const package = "tinyproxy";
const package_name = "Tinyproxy";
const package_tarname = package;
var package_string_buf: [128:0]u8 = undefined;
var package_string = try std.fmt.bufPrint(&package_string_buf, "{s} {s}", .{ package_name, version });
// const package_string: []u8 = try allocator.alloc(u8, package_name.len + 1 + version.len); // package_name ++ version;
// package_string[0..package_name.len].* = package_name.*;
// package_string[package_name.len] = ' ';
// package_string[package_name.len + 1 .. package_string.len].* = version.*;
const config_h = b.addConfigHeader(.{
.style = .blank,
}, .{
.VERSION = version,
.TINYPROXY_VERSION = version,
.XTINYPROXY_ENABLE = 1,
.FILTER_ENABLE = 1,
.UPSTREAM_SUPPORT = 1,
.REVERSE_SUPPORT = 1,
.TRANSPARENT_PROXY = 1,
.PACKAGE = package,
.PACKAGE_BUGREPORT = "https://tinyproxy.github.io/",
.PACKAGE_NAME = package_name,
.PACKAGE_STRING = package_string,
.PACKAGE_TARNAME = package_tarname,
.PACKAGE_URL = "",
.PACKAGE_VERSION = version,
// /* Define to 1 if you can safely include both <sys/time.h> and <time.h>. This
// macro is obsolete. */
.TIME_WITH_SYS_TIME = 1,
// /* This controls remote proxy stats display. */
.TINYPROXY_STATHOST = "tinyproxy.stats",
});
const exe = b.addExecutable(.{
.name = "tinyproxy",
.target = target,
.optimize = optimize,
});
exe.addConfigHeader(config_h);
exe.addIncludePath(.{ .path = "src/" });
exe.defineCMacro("HAVE_CONFIG_H", null);
exe.defineCMacro("SYSCONFDIR", "\"/etc\"");
// exe.defineCMacro("LOCALSTATEDIR", "")
if (target.isWindows()) {
exe.defineCMacro("_CRT_SECURE_NO_DEPRECATE", "1");
exe.defineCMacro("HAVE_LIBCRYPT32", null);
exe.defineCMacro("HAVE_WINSOCK2_H", null);
exe.defineCMacro("HAVE_IOCTLSOCKET", null);
exe.defineCMacro("HAVE_SELECT", null);
exe.defineCMacro("LIBSSH2_DH_GEX_NEW", "1");
if (target.getAbi().isGnu()) {
exe.defineCMacro("HAVE_UNISTD_H", null);
exe.defineCMacro("HAVE_INTTYPES_H", null);
exe.defineCMacro("HAVE_SYS_TIME_H", null);
exe.defineCMacro("HAVE_GETTIMEOFDAY", null);
}
} else {
exe.defineCMacro("HAVE_UNISTD_H", null);
exe.defineCMacro("HAVE_INTTYPES_H", null);
exe.defineCMacro("HAVE_STDLIB_H", null);
exe.defineCMacro("HAVE_SYS_SELECT_H", null);
exe.defineCMacro("HAVE_SYS_UIO_H", null);
exe.defineCMacro("HAVE_SYS_SOCKET_H", null);
exe.defineCMacro("HAVE_SYS_IOCTL_H", null);
exe.defineCMacro("HAVE_SYS_TIME_H", null);
exe.defineCMacro("HAVE_SYS_UN_H", null);
exe.defineCMacro("HAVE_LONGLONG", null);
exe.defineCMacro("HAVE_GETTIMEOFDAY", null);
exe.defineCMacro("HAVE_INET_ADDR", null);
exe.defineCMacro("HAVE_POLL", null);
exe.defineCMacro("HAVE_SELECT", null);
exe.defineCMacro("HAVE_SOCKET", null);
exe.defineCMacro("HAVE_STRTOLL", null);
exe.defineCMacro("HAVE_SNPRINTF", null);
exe.defineCMacro("HAVE_O_NONBLOCK", null);
exe.defineCMacro("HAVE_SYSEXITS_H", null);
}
exe.addCSourceFiles(srcs, &.{});
exe.linkLibC();
b.installArtifact(exe);
}
const srcs = &.{
"src/hostspec.c",
"src/acl.c",
"src/anonymous.c",
"src/buffer.c",
"src/child.c",
"src/conf-tokens.c",
"src/conf.c",
"src/conns.c",
"src/daemon.c",
"src/heap.c",
"src/html-error.c",
"src/http-message.c",
"src/log.c",
"src/network.c",
"src/reqs.c",
"src/sock.c",
"src/stats.c",
"src/text.c",
"src/main.c",
"src/utils.c",
"src/upstream.c",
"src/basicauth.c",
"src/base64.c",
"src/sblist.c",
"src/hsearch.c",
"src/orderedmap.c",
"src/loop.c",
"src/mypoll.c",
"src/connect-ports.c",
"src/filter.c",
"src/reverse-proxy.c",
"src/transparent-proxy.c",
};