2022-04-02 20:23:18 +00:00
|
|
|
const std = @import("std");
|
2022-11-21 10:18:46 +00:00
|
|
|
const Pkg = std.build.Pkg;
|
|
|
|
|
|
|
|
const Packages = struct {
|
|
|
|
opts: Pkg,
|
|
|
|
util: Pkg,
|
|
|
|
http: Pkg,
|
|
|
|
sql: Pkg,
|
|
|
|
api: Pkg,
|
|
|
|
template: Pkg,
|
|
|
|
main: Pkg,
|
2022-10-08 20:47:54 +00:00
|
|
|
};
|
|
|
|
|
2022-11-21 10:18:46 +00:00
|
|
|
fn makePkgs(b: *std.build.Builder, build_options: Pkg) Packages {
|
|
|
|
const opt = b.dupePkg(build_options);
|
|
|
|
const util_pkg = b.dupePkg(.{
|
|
|
|
.name = "util",
|
|
|
|
.source = std.build.FileSource.relative("src/util/lib.zig"),
|
|
|
|
.dependencies = &.{opt},
|
|
|
|
});
|
|
|
|
|
|
|
|
const http_pkg = b.dupePkg(.{
|
|
|
|
.name = "http",
|
|
|
|
.source = std.build.FileSource.relative("src/http/lib.zig"),
|
|
|
|
.dependencies = &.{ util_pkg, opt },
|
|
|
|
});
|
|
|
|
|
|
|
|
const sql_pkg = b.dupePkg(.{
|
|
|
|
.name = "sql",
|
|
|
|
.source = std.build.FileSource.relative("src/sql/lib.zig"),
|
|
|
|
.dependencies = &.{ util_pkg, opt },
|
|
|
|
});
|
|
|
|
|
|
|
|
const api_pkg = b.dupePkg(.{
|
|
|
|
.name = "api",
|
|
|
|
.source = std.build.FileSource.relative("src/api/lib.zig"),
|
|
|
|
.dependencies = &.{ util_pkg, sql_pkg, opt },
|
|
|
|
});
|
|
|
|
|
|
|
|
const template_pkg = b.dupePkg(.{
|
|
|
|
.name = "template",
|
|
|
|
.source = std.build.FileSource.relative("src/template/lib.zig"),
|
|
|
|
.dependencies = &.{opt},
|
|
|
|
});
|
|
|
|
|
|
|
|
const main_pkg = b.dupePkg(.{
|
|
|
|
.name = "main",
|
|
|
|
.source = std.build.FileSource.relative("src/main/main.zig"),
|
|
|
|
.dependencies = &.{ util_pkg, http_pkg, sql_pkg, api_pkg, template_pkg, opt },
|
|
|
|
});
|
|
|
|
|
|
|
|
return Packages{
|
|
|
|
.opts = opt,
|
|
|
|
.util = util_pkg,
|
|
|
|
.http = http_pkg,
|
|
|
|
.sql = sql_pkg,
|
|
|
|
.api = api_pkg,
|
|
|
|
.template = template_pkg,
|
|
|
|
.main = main_pkg,
|
|
|
|
};
|
|
|
|
}
|
2022-09-09 04:15:52 +00:00
|
|
|
|
2022-11-21 10:18:46 +00:00
|
|
|
pub fn build(b: *std.build.Builder) !void {
|
2022-04-02 20:23:18 +00:00
|
|
|
// Standard target options allows the person running `zig build` to choose
|
|
|
|
// what target to build for. Here we do not override the defaults, which
|
|
|
|
// means any target is allowed, and the default is native. Other options
|
|
|
|
// for restricting supported target set are available.
|
|
|
|
const target = b.standardTargetOptions(.{});
|
|
|
|
|
|
|
|
// Standard release options allow the person running `zig build` to select
|
|
|
|
// between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall.
|
|
|
|
const mode = b.standardReleaseOptions();
|
2022-11-21 10:18:46 +00:00
|
|
|
const options = b.addOptions();
|
|
|
|
const enable_sqlite = b.option(bool, "sqlite", "Enable the use of sqlite as a database engine") orelse true;
|
|
|
|
const enable_postgres = b.option(bool, "postgres", "Enable the use of postgres as a database engine") orelse true;
|
|
|
|
options.addOption(bool, "enable_sqlite", enable_sqlite);
|
|
|
|
options.addOption(bool, "enable_postgres", enable_postgres);
|
|
|
|
if (!enable_sqlite and !enable_postgres) {
|
|
|
|
std.log.err("No database engine enabled", .{});
|
|
|
|
return error.InvalidBuildOptions;
|
|
|
|
}
|
|
|
|
|
|
|
|
const pkgs = makePkgs(b, options.getPackage("build_options"));
|
2022-04-02 20:23:18 +00:00
|
|
|
|
2022-06-09 05:54:41 +00:00
|
|
|
const exe = b.addExecutable("apub", "src/main/main.zig");
|
2022-04-02 20:23:18 +00:00
|
|
|
exe.setTarget(target);
|
|
|
|
exe.setBuildMode(mode);
|
2022-06-09 05:54:41 +00:00
|
|
|
|
2022-11-21 10:18:46 +00:00
|
|
|
exe.addPackage(pkgs.opts);
|
|
|
|
exe.addPackage(pkgs.sql);
|
|
|
|
exe.addPackage(pkgs.util);
|
|
|
|
exe.addPackage(pkgs.http);
|
|
|
|
exe.addPackage(pkgs.api);
|
|
|
|
exe.addPackage(pkgs.template);
|
2022-06-09 05:54:41 +00:00
|
|
|
|
2022-11-21 10:18:46 +00:00
|
|
|
if (enable_sqlite) exe.linkSystemLibrary("sqlite3");
|
|
|
|
if (enable_postgres) exe.linkSystemLibrary("pq");
|
2022-07-15 00:58:08 +00:00
|
|
|
exe.linkLibC();
|
|
|
|
|
2022-11-05 07:26:53 +00:00
|
|
|
//const util_tests = b.addTest("src/util/lib.zig");
|
|
|
|
const http_tests = b.addTest("src/http/test.zig");
|
|
|
|
//const sql_tests = b.addTest("src/sql/lib.zig");
|
2022-11-21 10:18:46 +00:00
|
|
|
http_tests.addPackage(pkgs.util);
|
|
|
|
//sql_tests.addPackage(pkgs.util);
|
2022-09-08 08:50:10 +00:00
|
|
|
|
|
|
|
const unit_tests = b.step("unit-tests", "Run tests");
|
2022-11-05 07:26:53 +00:00
|
|
|
//unit_tests.dependOn(&util_tests.step);
|
2022-09-08 08:50:10 +00:00
|
|
|
unit_tests.dependOn(&http_tests.step);
|
2022-11-05 07:26:53 +00:00
|
|
|
//unit_tests.dependOn(&sql_tests.step);
|
2022-09-08 08:50:10 +00:00
|
|
|
|
2022-09-09 04:15:52 +00:00
|
|
|
const api_integration = b.addTest("./tests/api_integration/lib.zig");
|
2022-11-21 10:18:46 +00:00
|
|
|
api_integration.addPackage(pkgs.opts);
|
|
|
|
api_integration.addPackage(pkgs.sql);
|
|
|
|
api_integration.addPackage(pkgs.util);
|
|
|
|
api_integration.addPackage(pkgs.http);
|
|
|
|
api_integration.addPackage(pkgs.main);
|
|
|
|
api_integration.addPackage(pkgs.api);
|
2022-09-09 04:15:52 +00:00
|
|
|
api_integration.linkLibC();
|
2022-11-21 10:18:46 +00:00
|
|
|
if (enable_sqlite) api_integration.linkSystemLibrary("sqlite3");
|
|
|
|
if (enable_postgres) api_integration.linkSystemLibrary("pq");
|
2022-09-09 04:15:52 +00:00
|
|
|
|
|
|
|
const integration_tests = b.step("integration-tests", "run tests");
|
|
|
|
integration_tests.dependOn(&api_integration.step);
|
|
|
|
|
2022-09-08 08:50:10 +00:00
|
|
|
const run_cmd = exe.run();
|
|
|
|
//run_cmd.step.dependOn(b.getInstallStep());
|
|
|
|
if (b.args) |args| {
|
|
|
|
run_cmd.addArgs(args);
|
|
|
|
}
|
|
|
|
|
|
|
|
const run_step = b.step("run", "Run the server");
|
|
|
|
run_step.dependOn(&run_cmd.step);
|
2022-04-02 20:23:18 +00:00
|
|
|
}
|