diff --git a/test/standalone/cmakedefine/build.zig b/test/standalone/cmakedefine/build.zig index 35dd43194612e1a993025432f4ec5d1163fd7216..52fda369a64782fc1a338a55b07b6e5cba1aba2b 100644 --- a/test/standalone/cmakedefine/build.zig +++ b/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}"; - const config_header_step = step.dependencies.getLast(); - const config_header = @fieldParentPtr(ConfigHeader, "step", config_header_step); + for (step.dependencies.items) |config_header_step| { + 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 = try cwd.readFileAlloc(allocator, cmake_header_path, config_header.max_bytes); - defer allocator.free(cmake_header); + 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 zig_header = try cwd.readFileAlloc(allocator, zig_header_path, config_header.max_bytes); - defer allocator.free(zig_header); + const cmake_header = try cwd.readFileAlloc(allocator, cmake_header_path, config_header.max_bytes); + defer allocator.free(cmake_header); - const header_text_index = std.mem.indexOf(u8, zig_header, "\n") orelse @panic("Could not find comment in header filer"); + const zig_header = try cwd.readFileAlloc(allocator, zig_header_path, config_header.max_bytes); + defer allocator.free(zig_header); - if (!std.mem.eql(u8, zig_header[header_text_index + 1 ..], cmake_header)) { - @panic("processed cmakedefine header does not match expected output"); + 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"); + } } } diff --git a/test/standalone/cmakedefine/config.h.cmake b/test/standalone/cmakedefine/config.h.cmake deleted file mode 100644 index 4f078970c7a52e7bd368ba415ff8fc0d07b48594..0000000000000000000000000000000000000000 --- a/test/standalone/cmakedefine/config.h.cmake +++ /dev/null @@ -1,145 +0,0 @@ -// cmakedefine -// undefined -#cmakedefine noval unreachable - -// 1 -#cmakedefine trueval 1 - -// undefined -#cmakedefine falseval unreachable - -// undefined -#cmakedefine zeroval unreachable - -// 1 -#cmakedefine oneval 1 - -// 1 -#cmakedefine tenval 1 - -// 1 -#cmakedefine stringval 1 - - -// cmakedefine01 -// 0 -#cmakedefine01 boolnoval - -// 1 -#cmakedefine01 booltrueval - -// 0 -#cmakedefine01 boolfalseval - -// 0 -#cmakedefine01 boolzeroval - -// 1 -#cmakedefine01 booloneval - -// 1 -#cmakedefine01 booltenval - -// 1 -#cmakedefine01 boolstringval - - -// @ substition - -// no substition -// @noval@ - -// no substition -// @noval@@noval@ - -// no substition -// @noval@.@noval@ - -// 1 -// @trueval@ - -// 0 -// @falseval@ - -// 10 -// @trueval@@falseval@ - -// 0.1 -// @falseval@.@trueval@ - -// 0 -// @zeroval@ - -// 1 -// @oneval@ - -// 10 -// @tenval@ - -// 01 -// @zeroval@@oneval@ - -// 0.10 -// @zeroval@.@tenval@ - -// test -// @stringval@ - -// testtest -// @stringval@@stringval@ - -// test.test -// @stringval@.@stringval@ - -// test10 -// @noval@@stringval@@trueval@@zeroval@ - -// ${} substition - -// no substition -// ${noval} - -// no substition -// ${noval}${noval} - -// no substition -// ${noval}.${noval} - -// 1 -// ${trueval} - -// 0 -// ${falseval} - -// 10 -// ${trueval}${falseval} - -// 0.1 -// ${falseval}.${trueval} - -// 0 -// ${zeroval} - -// 1 -// ${oneval} - -// 10 -// ${tenval} - -// 01 -// ${zeroval}${oneval} - -// 0.10 -// ${zeroval}.${tenval} - -// test -// ${stringval} - -// testtest -// ${stringval}${stringval} - -// test.test -// ${stringval}.${stringval} - -// test10 -// ${noval}${stringval}${trueval}${zeroval} diff --git a/test/standalone/cmakedefine/config.h.in b/test/standalone/cmakedefine/config.h.in new file mode 100644 index 0000000000000000000000000000000000000000..4f078970c7a52e7bd368ba415ff8fc0d07b48594 --- /dev/null +++ b/test/standalone/cmakedefine/config.h.in @@ -0,0 +1,145 @@ +// cmakedefine +// undefined +#cmakedefine noval unreachable + +// 1 +#cmakedefine trueval 1 + +// undefined +#cmakedefine falseval unreachable + +// undefined +#cmakedefine zeroval unreachable + +// 1 +#cmakedefine oneval 1 + +// 1 +#cmakedefine tenval 1 + +// 1 +#cmakedefine stringval 1 + + +// cmakedefine01 +// 0 +#cmakedefine01 boolnoval + +// 1 +#cmakedefine01 booltrueval + +// 0 +#cmakedefine01 boolfalseval + +// 0 +#cmakedefine01 boolzeroval + +// 1 +#cmakedefine01 booloneval + +// 1 +#cmakedefine01 booltenval + +// 1 +#cmakedefine01 boolstringval + + +// @ substition + +// no substition +// @noval@ + +// no substition +// @noval@@noval@ + +// no substition +// @noval@.@noval@ + +// 1 +// @trueval@ + +// 0 +// @falseval@ + +// 10 +// @trueval@@falseval@ + +// 0.1 +// @falseval@.@trueval@ + +// 0 +// @zeroval@ + +// 1 +// @oneval@ + +// 10 +// @tenval@ + +// 01 +// @zeroval@@oneval@ + +// 0.10 +// @zeroval@.@tenval@ + +// test +// @stringval@ + +// testtest +// @stringval@@stringval@ + +// test.test +// @stringval@.@stringval@ + +// test10 +// @noval@@stringval@@trueval@@zeroval@ + +// ${} substition + +// no substition +// ${noval} + +// no substition +// ${noval}${noval} + +// no substition +// ${noval}.${noval} + +// 1 +// ${trueval} + +// 0 +// ${falseval} + +// 10 +// ${trueval}${falseval} + +// 0.1 +// ${falseval}.${trueval} + +// 0 +// ${zeroval} + +// 1 +// ${oneval} + +// 10 +// ${tenval} + +// 01 +// ${zeroval}${oneval} + +// 0.10 +// ${zeroval}.${tenval} + +// test +// ${stringval} + +// testtest +// ${stringval}${stringval} + +// test.test +// ${stringval}.${stringval} + +// test10 +// ${noval}${stringval}${trueval}${zeroval} diff --git a/test/standalone/cmakedefine/expected.h b/test/standalone/cmakedefine/expected.h deleted file mode 100644 index 580f0f11d88bc56b2645ddbcf36a9a73baa023f7..0000000000000000000000000000000000000000 --- a/test/standalone/cmakedefine/expected.h +++ /dev/null @@ -1,145 +0,0 @@ -// cmakedefine -// undefined -/* #undef noval */ - -// 1 -#define trueval 1 - -// undefined -/* #undef falseval */ - -// undefined -/* #undef zeroval */ - -// 1 -#define oneval 1 - -// 1 -#define tenval 1 - -// 1 -#define stringval 1 - - -// cmakedefine01 -// 0 -#define boolnoval 0 - -// 1 -#define booltrueval 1 - -// 0 -#define boolfalseval 0 - -// 0 -#define boolzeroval 0 - -// 1 -#define booloneval 1 - -// 1 -#define booltenval 1 - -// 1 -#define boolstringval 1 - - -// @ substition - -// no substition -// - -// no substition -// - -// no substition -// . - -// 1 -// 1 - -// 0 -// 0 - -// 10 -// 10 - -// 0.1 -// 0.1 - -// 0 -// 0 - -// 1 -// 1 - -// 10 -// 10 - -// 01 -// 01 - -// 0.10 -// 0.10 - -// test -// test - -// testtest -// testtest - -// test.test -// test.test - -// test10 -// test10 - -// substition - -// no substition -// - -// no substition -// - -// no substition -// . - -// 1 -// 1 - -// 0 -// 0 - -// 10 -// 10 - -// 0.1 -// 0.1 - -// 0 -// 0 - -// 1 -// 1 - -// 10 -// 10 - -// 01 -// 01 - -// 0.10 -// 0.10 - -// test -// test - -// testtest -// testtest - -// test.test -// test.test - -// test10 -// test10 diff --git a/test/standalone/cmakedefine/expected_config.h b/test/standalone/cmakedefine/expected_config.h new file mode 100644 index 0000000000000000000000000000000000000000..580f0f11d88bc56b2645ddbcf36a9a73baa023f7 --- /dev/null +++ b/test/standalone/cmakedefine/expected_config.h @@ -0,0 +1,145 @@ +// cmakedefine +// undefined +/* #undef noval */ + +// 1 +#define trueval 1 + +// undefined +/* #undef falseval */ + +// undefined +/* #undef zeroval */ + +// 1 +#define oneval 1 + +// 1 +#define tenval 1 + +// 1 +#define stringval 1 + + +// cmakedefine01 +// 0 +#define boolnoval 0 + +// 1 +#define booltrueval 1 + +// 0 +#define boolfalseval 0 + +// 0 +#define boolzeroval 0 + +// 1 +#define booloneval 1 + +// 1 +#define booltenval 1 + +// 1 +#define boolstringval 1 + + +// @ substition + +// no substition +// + +// no substition +// + +// no substition +// . + +// 1 +// 1 + +// 0 +// 0 + +// 10 +// 10 + +// 0.1 +// 0.1 + +// 0 +// 0 + +// 1 +// 1 + +// 10 +// 10 + +// 01 +// 01 + +// 0.10 +// 0.10 + +// test +// test + +// testtest +// testtest + +// test.test +// test.test + +// test10 +// test10 + +// substition + +// no substition +// + +// no substition +// + +// no substition +// . + +// 1 +// 1 + +// 0 +// 0 + +// 10 +// 10 + +// 0.1 +// 0.1 + +// 0 +// 0 + +// 1 +// 1 + +// 10 +// 10 + +// 01 +// 01 + +// 0.10 +// 0.10 + +// test +// test + +// testtest +// testtest + +// test.test +// test.test + +// test10 +// test10 diff --git a/test/standalone/cmakedefine/expected_error.h b/test/standalone/cmakedefine/expected_error.h new file mode 100644 index 0000000000000000000000000000000000000000..82e77313048d5ca8b293ca11d8172f4f12bab9bf --- /dev/null +++ b/test/standalone/cmakedefine/expected_error.h @@ -0,0 +1,5 @@ +// bad interleave +#define @STRV${AL_AT@TEXT} + +// bad interleave +#define ${STRV@AL_AT}TEXT@ diff --git a/test/standalone/cmakedefine/expected_pwd.sh b/test/standalone/cmakedefine/expected_pwd.sh new file mode 100644 index 0000000000000000000000000000000000000000..7e1d44c8eb0ee4b373be12c9e652653b6d228587 --- /dev/null +++ b/test/standalone/cmakedefine/expected_pwd.sh @@ -0,0 +1 @@ +echo ${PWD} diff --git a/test/standalone/cmakedefine/expected_sigil.h b/test/standalone/cmakedefine/expected_sigil.h new file mode 100644 index 0000000000000000000000000000000000000000..248daaa6ccd0cee1d92420c902eaf7c770248fa2 --- /dev/null +++ b/test/standalone/cmakedefine/expected_sigil.h @@ -0,0 +1,5 @@ +#define VAR +#define AT @ +#define ATAT @@ +#define ATATAT @@@ +#define ATATATAT @@@@ diff --git a/test/standalone/cmakedefine/expected_stack.h b/test/standalone/cmakedefine/expected_stack.h new file mode 100644 index 0000000000000000000000000000000000000000..fb8876f2b983f4ad284895d8c2eaf1eab18d8988 --- /dev/null +++ b/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) diff --git a/test/standalone/cmakedefine/expected_wrapper.h b/test/standalone/cmakedefine/expected_wrapper.h new file mode 100644 index 0000000000000000000000000000000000000000..ad052b20fd7e681447280e43fb692de4b79809ff --- /dev/null +++ b/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 diff --git a/test/standalone/cmakedefine/pwd.sh.in b/test/standalone/cmakedefine/pwd.sh.in new file mode 100644 index 0000000000000000000000000000000000000000..9e4d91207ee88cfdea37fe21d0d981ae674bdcd3 --- /dev/null +++ b/test/standalone/cmakedefine/pwd.sh.in @@ -0,0 +1 @@ +echo @DIR@ diff --git a/test/standalone/cmakedefine/sigil.h.in b/test/standalone/cmakedefine/sigil.h.in new file mode 100644 index 0000000000000000000000000000000000000000..0f64688ba71dccd1e84384b844c1e803f83b9570 --- /dev/null +++ b/test/standalone/cmakedefine/sigil.h.in @@ -0,0 +1,5 @@ +#define VAR ${} +#define AT @ +#define ATAT @@ +#define ATATAT @@@ +#define ATATATAT @@@@ diff --git a/test/standalone/cmakedefine/stack.h.in b/test/standalone/cmakedefine/stack.h.in new file mode 100644 index 0000000000000000000000000000000000000000..d4322f5990487e73b46d731ec22ab80eafce2edc --- /dev/null +++ b/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} diff --git a/test/standalone/cmakedefine/wrapper.h.in b/test/standalone/cmakedefine/wrapper.h.in new file mode 100644 index 0000000000000000000000000000000000000000..8985186c195a88b5502d74fd833e4f248d643210 --- /dev/null +++ b/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@}