Add zig build system
This commit is contained in:
parent
c4df45b7e4
commit
74a866f08e
3
.gitignore
vendored
3
.gitignore
vendored
@ -21,3 +21,6 @@ cscope.out
|
||||
compile
|
||||
*~
|
||||
tags
|
||||
|
||||
zig-cache/
|
||||
zig-out/
|
||||
|
171
build.zig
Normal file
171
build.zig
Normal 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",
|
||||
};
|
Loading…
Reference in New Issue
Block a user