Commit 2ce32e4497
Changed files (12)
test/standalone/cmakedefine/build.zig
@@ -4,7 +4,8 @@ const ConfigHeader = std.Build.Step.ConfigHeader;
pub fn build(b: *std.Build) void {
const config_header = b.addConfigHeader(
.{
- .style = .{ .cmake = .{ .path = "config.h.cmake" } },
+ .style = .{ .cmake = .{ .path = "config.h.in" } },
+ .include_path = "config.h",
},
.{
.noval = null,
@@ -25,32 +26,85 @@ pub fn build(b: *std.Build) void {
},
);
+ const pwd_sh = b.addConfigHeader(
+ .{
+ .style = .{ .cmake = .{ .path = "pwd.sh.in" } },
+ .include_path = "pwd.sh",
+ },
+ .{ .DIR = "${PWD}" },
+ );
+
+ const sigil_header = b.addConfigHeader(
+ .{
+ .style = .{ .cmake = .{ .path = "sigil.h.in" } },
+ .include_path = "sigil.h",
+ },
+ .{},
+ );
+
+ const stack_header = b.addConfigHeader(
+ .{
+ .style = .{ .cmake = .{ .path = "stack.h.in" } },
+ .include_path = "stack.h",
+ },
+ .{
+ .AT = "@",
+ .UNDERSCORE = "_",
+ .NEST_UNDERSCORE_PROXY = "UNDERSCORE",
+ .NEST_PROXY = "NEST_UNDERSCORE_PROXY",
+ },
+ );
+
+ const wrapper_header = b.addConfigHeader(
+ .{
+ .style = .{ .cmake = .{ .path = "wrapper.h.in" } },
+ .include_path = "wrapper.h",
+ },
+ .{
+ .DOLLAR = "$",
+ .TEXT = "TRAP",
+
+ .STRING = "TEXT",
+ .STRING_AT = "@STRING@",
+ .STRING_CURLY = "{STRING}",
+ .STRING_VAR = "${STRING}",
+ },
+ );
+
const test_step = b.step("test", "Test it");
test_step.makeFn = compare_headers;
test_step.dependOn(&config_header.step);
+ test_step.dependOn(&pwd_sh.step);
+ test_step.dependOn(&sigil_header.step);
+ test_step.dependOn(&stack_header.step);
+ test_step.dependOn(&wrapper_header.step);
}
fn compare_headers(step: *std.Build.Step, prog_node: *std.Progress.Node) !void {
_ = prog_node;
const allocator = step.owner.allocator;
- const cmake_header_path = "expected.h";
+ const expected_fmt = "expected_{s}";
+
+ for (step.dependencies.items) |config_header_step| {
+ const config_header = @fieldParentPtr(ConfigHeader, "step", config_header_step);
- const config_header_step = step.dependencies.getLast();
- const config_header = @fieldParentPtr(ConfigHeader, "step", config_header_step);
+ const zig_header_path = config_header.output_file.path orelse @panic("Could not locate header file");
- const zig_header_path = config_header.output_file.path orelse @panic("Could not locate header file");
+ const cwd = std.fs.cwd();
- const cwd = std.fs.cwd();
+ const cmake_header_path = try std.fmt.allocPrint(allocator, expected_fmt, .{std.fs.path.basename(zig_header_path)});
+ defer allocator.free(cmake_header_path);
- const cmake_header = try cwd.readFileAlloc(allocator, cmake_header_path, config_header.max_bytes);
- defer allocator.free(cmake_header);
+ const cmake_header = try cwd.readFileAlloc(allocator, cmake_header_path, config_header.max_bytes);
+ defer allocator.free(cmake_header);
- const zig_header = try cwd.readFileAlloc(allocator, zig_header_path, config_header.max_bytes);
- defer allocator.free(zig_header);
+ const zig_header = try cwd.readFileAlloc(allocator, zig_header_path, config_header.max_bytes);
+ defer allocator.free(zig_header);
- const header_text_index = std.mem.indexOf(u8, zig_header, "\n") orelse @panic("Could not find comment in header filer");
+ const header_text_index = std.mem.indexOf(u8, zig_header, "\n") orelse @panic("Could not find comment in header filer");
- if (!std.mem.eql(u8, zig_header[header_text_index + 1 ..], cmake_header)) {
- @panic("processed cmakedefine header does not match expected output");
+ if (!std.mem.eql(u8, zig_header[header_text_index + 1 ..], cmake_header)) {
+ @panic("processed cmakedefine header does not match expected output");
+ }
}
}
test/standalone/cmakedefine/config.h.cmake → test/standalone/cmakedefine/config.h.in
File renamed without changes
test/standalone/cmakedefine/expected.h → test/standalone/cmakedefine/expected_config.h
File renamed without changes
test/standalone/cmakedefine/expected_error.h
@@ -0,0 +1,5 @@
+// bad interleave
+#define @STRV${AL_AT@TEXT}
+
+// bad interleave
+#define ${STRV@AL_AT}TEXT@
test/standalone/cmakedefine/expected_pwd.sh
@@ -0,0 +1,1 @@
+echo ${PWD}
test/standalone/cmakedefine/expected_sigil.h
@@ -0,0 +1,5 @@
+#define VAR
+#define AT @
+#define ATAT @@
+#define ATATAT @@@
+#define ATATATAT @@@@
test/standalone/cmakedefine/expected_stack.h
@@ -0,0 +1,7 @@
+#define NEST_UNDERSCORE_PROXY NEST_UNDERSCORE_PROXY
+#define UNDERSCORE UNDERSCORE
+
+#define NEST_UNDERSCORE_PROXY NEST_UNDERSCORE_PROXY
+#define UNDERSCORE UNDERSCORE
+
+#define (empty)
test/standalone/cmakedefine/expected_wrapper.h
@@ -0,0 +1,30 @@
+// becomes TEXT
+#define TEXT
+#define TEXT
+
+// becomes `at`TEXT`at`
+#define @TEXT@
+#define @TEXT@
+
+// becomes TRAP
+#define TRAP
+
+// becomes `dollar sign`{STRING}
+#define ${STRING}
+#define ${STRING}
+
+// becomes `dollar sign`{STRING}
+#define ${STRING}
+#define ${STRING}
+
+// becomes `dollar sign`{TEXT}
+#define ${TEXT}
+#define ${TEXT}
+
+// becomes `at`STRING`at`
+#define @STRING@
+#define @STRING@
+
+// becomes `empty`
+#define
+#define
test/standalone/cmakedefine/pwd.sh.in
@@ -0,0 +1,1 @@
+echo @DIR@
test/standalone/cmakedefine/sigil.h.in
@@ -0,0 +1,5 @@
+#define VAR ${}
+#define AT @
+#define ATAT @@
+#define ATATAT @@@
+#define ATATATAT @@@@
test/standalone/cmakedefine/stack.h.in
@@ -0,0 +1,7 @@
+#define NEST_UNDERSCORE_PROXY ${NEST${UNDERSCORE}PROXY}
+#define UNDERSCORE @NEST@UNDERSCORE@PROXY@
+
+#define NEST_UNDERSCORE_PROXY ${NEST${${NEST_UNDERSCORE${UNDERSCORE}PROXY}}PROXY}
+#define UNDERSCORE @NEST@@NEST_UNDERSCORE@UNDERSCORE@PROXY@@PROXY@
+
+#define (empty) ${NEST${${AT}UNDERSCORE${AT}}PROXY}
test/standalone/cmakedefine/wrapper.h.in
@@ -0,0 +1,30 @@
+// becomes TEXT
+#define @STRING@
+#define ${STRING}
+
+// becomes `at`TEXT`at`
+#define @${STRING}@
+#define @@STRING@@
+
+// becomes TRAP
+#define ${@STRING@}
+
+// becomes `dollar sign`{STRING}
+#define $@STRING_CURLY@
+#define $${STRING_CURLY}
+
+// becomes `dollar sign`{STRING}
+#define @STRING_VAR@
+#define ${STRING_VAR}
+
+// becomes `dollar sign`{TEXT}
+#define ${DOLLAR}{${STRING}}
+#define @DOLLAR@{${STRING}}
+
+// becomes `at`STRING`at`
+#define ${STRING_AT}
+#define @STRING_AT@
+
+// becomes `empty`
+#define ${${STRING_VAR}}
+#define ${@STRING_VAR@}