authorgravatar for aidenhaledev@gmail.comMrDmitry <aidenhaledev@gmail.com> 2024-01-24 23:25:42-05:00
committergravatar for aidenhaledev@gmail.comMrDmitry <aidenhaledev@gmail.com> 2024-01-26 13:33:17-05:00
log2ce32e44978428c367551c5c150d1ab12c0b73d7
tree3e50de776009cef0312299831410c7909911500d
parent8a0429e885489eac497aa97fdfcaaa1befb2b6d4

Extend standalone tests for cmakedefine


14 files changed, 448 insertions(+), 303 deletions(-)

test/standalone/cmakedefine/build.zig+67-13
...@@ -4,7 +4,8 @@ const ConfigHeader = std.Build.Step.ConfigHeader;...@@ -4,7 +4,8 @@ const ConfigHeader = std.Build.Step.ConfigHeader;
4pub fn build(b: *std.Build) void {4pub fn build(b: *std.Build) void {
5 const config_header = b.addConfigHeader(5 const config_header = b.addConfigHeader(
6 .{6 .{
7 .style = .{ .cmake = .{ .path = "config.h.cmake" } },7 .style = .{ .cmake = .{ .path = "config.h.in" } },
8 .include_path = "config.h",
8 },9 },
9 .{10 .{
10 .noval = null,11 .noval = null,
...@@ -25,32 +26,85 @@ pub fn build(b: *std.Build) void {...@@ -25,32 +26,85 @@ pub fn build(b: *std.Build) void {
25 },26 },
26 );27 );
2728
29 const pwd_sh = b.addConfigHeader(
30 .{
31 .style = .{ .cmake = .{ .path = "pwd.sh.in" } },
32 .include_path = "pwd.sh",
33 },
34 .{ .DIR = "${PWD}" },
35 );
36
37 const sigil_header = b.addConfigHeader(
38 .{
39 .style = .{ .cmake = .{ .path = "sigil.h.in" } },
40 .include_path = "sigil.h",
41 },
42 .{},
43 );
44
45 const stack_header = b.addConfigHeader(
46 .{
47 .style = .{ .cmake = .{ .path = "stack.h.in" } },
48 .include_path = "stack.h",
49 },
50 .{
51 .AT = "@",
52 .UNDERSCORE = "_",
53 .NEST_UNDERSCORE_PROXY = "UNDERSCORE",
54 .NEST_PROXY = "NEST_UNDERSCORE_PROXY",
55 },
56 );
57
58 const wrapper_header = b.addConfigHeader(
59 .{
60 .style = .{ .cmake = .{ .path = "wrapper.h.in" } },
61 .include_path = "wrapper.h",
62 },
63 .{
64 .DOLLAR = "$",
65 .TEXT = "TRAP",
66
67 .STRING = "TEXT",
68 .STRING_AT = "@STRING@",
69 .STRING_CURLY = "{STRING}",
70 .STRING_VAR = "${STRING}",
71 },
72 );
73
28 const test_step = b.step("test", "Test it");74 const test_step = b.step("test", "Test it");
29 test_step.makeFn = compare_headers;75 test_step.makeFn = compare_headers;
30 test_step.dependOn(&config_header.step);76 test_step.dependOn(&config_header.step);
77 test_step.dependOn(&pwd_sh.step);
78 test_step.dependOn(&sigil_header.step);
79 test_step.dependOn(&stack_header.step);
80 test_step.dependOn(&wrapper_header.step);
31}81}
3282
33fn compare_headers(step: *std.Build.Step, prog_node: *std.Progress.Node) !void {83fn compare_headers(step: *std.Build.Step, prog_node: *std.Progress.Node) !void {
34 _ = prog_node;84 _ = prog_node;
35 const allocator = step.owner.allocator;85 const allocator = step.owner.allocator;
36 const cmake_header_path = "expected.h";86 const expected_fmt = "expected_{s}";
87
88 for (step.dependencies.items) |config_header_step| {
89 const config_header = @fieldParentPtr(ConfigHeader, "step", config_header_step);
3790
38 const config_header_step = step.dependencies.getLast();91 const zig_header_path = config_header.output_file.path orelse @panic("Could not locate header file");
39 const config_header = @fieldParentPtr(ConfigHeader, "step", config_header_step);
4092
41 const zig_header_path = config_header.output_file.path orelse @panic("Could not locate header file");93 const cwd = std.fs.cwd();
4294
43 const cwd = std.fs.cwd();95 const cmake_header_path = try std.fmt.allocPrint(allocator, expected_fmt, .{std.fs.path.basename(zig_header_path)});
96 defer allocator.free(cmake_header_path);
4497
45 const cmake_header = try cwd.readFileAlloc(allocator, cmake_header_path, config_header.max_bytes);98 const cmake_header = try cwd.readFileAlloc(allocator, cmake_header_path, config_header.max_bytes);
46 defer allocator.free(cmake_header);99 defer allocator.free(cmake_header);
47100
48 const zig_header = try cwd.readFileAlloc(allocator, zig_header_path, config_header.max_bytes);101 const zig_header = try cwd.readFileAlloc(allocator, zig_header_path, config_header.max_bytes);
49 defer allocator.free(zig_header);102 defer allocator.free(zig_header);
50103
51 const header_text_index = std.mem.indexOf(u8, zig_header, "\n") orelse @panic("Could not find comment in header filer");104 const header_text_index = std.mem.indexOf(u8, zig_header, "\n") orelse @panic("Could not find comment in header filer");
52105
53 if (!std.mem.eql(u8, zig_header[header_text_index + 1 ..], cmake_header)) {106 if (!std.mem.eql(u8, zig_header[header_text_index + 1 ..], cmake_header)) {
54 @panic("processed cmakedefine header does not match expected output");107 @panic("processed cmakedefine header does not match expected output");
108 }
55 }109 }
56}110}
test/standalone/cmakedefine/config.h.cmake deleted-145
...@@ -1,145 +0,0 @@
1// cmakedefine
2// undefined
3#cmakedefine noval unreachable
4
5// 1
6#cmakedefine trueval 1
7
8// undefined
9#cmakedefine falseval unreachable
10
11// undefined
12#cmakedefine zeroval unreachable
13
14// 1
15#cmakedefine oneval 1
16
17// 1
18#cmakedefine tenval 1
19
20// 1
21#cmakedefine stringval 1
22
23
24// cmakedefine01
25// 0
26#cmakedefine01 boolnoval
27
28// 1
29#cmakedefine01 booltrueval
30
31// 0
32#cmakedefine01 boolfalseval
33
34// 0
35#cmakedefine01 boolzeroval
36
37// 1
38#cmakedefine01 booloneval
39
40// 1
41#cmakedefine01 booltenval
42
43// 1
44#cmakedefine01 boolstringval
45
46
47// @ substition
48
49// no substition
50// @noval@
51
52// no substition
53// @noval@@noval@
54
55// no substition
56// @noval@.@noval@
57
58// 1
59// @trueval@
60
61// 0
62// @falseval@
63
64// 10
65// @trueval@@falseval@
66
67// 0.1
68// @falseval@.@trueval@
69
70// 0
71// @zeroval@
72
73// 1
74// @oneval@
75
76// 10
77// @tenval@
78
79// 01
80// @zeroval@@oneval@
81
82// 0.10
83// @zeroval@.@tenval@
84
85// test
86// @stringval@
87
88// testtest
89// @stringval@@stringval@
90
91// test.test
92// @stringval@.@stringval@
93
94// test10
95// @noval@@stringval@@trueval@@zeroval@
96
97// ${} substition
98
99// no substition
100// ${noval}
101
102// no substition
103// ${noval}${noval}
104
105// no substition
106// ${noval}.${noval}
107
108// 1
109// ${trueval}
110
111// 0
112// ${falseval}
113
114// 10
115// ${trueval}${falseval}
116
117// 0.1
118// ${falseval}.${trueval}
119
120// 0
121// ${zeroval}
122
123// 1
124// ${oneval}
125
126// 10
127// ${tenval}
128
129// 01
130// ${zeroval}${oneval}
131
132// 0.10
133// ${zeroval}.${tenval}
134
135// test
136// ${stringval}
137
138// testtest
139// ${stringval}${stringval}
140
141// test.test
142// ${stringval}.${stringval}
143
144// test10
145// ${noval}${stringval}${trueval}${zeroval}
test/standalone/cmakedefine/config.h.in created+145
...@@ -0,0 +1,145 @@
1// cmakedefine
2// undefined
3#cmakedefine noval unreachable
4
5// 1
6#cmakedefine trueval 1
7
8// undefined
9#cmakedefine falseval unreachable
10
11// undefined
12#cmakedefine zeroval unreachable
13
14// 1
15#cmakedefine oneval 1
16
17// 1
18#cmakedefine tenval 1
19
20// 1
21#cmakedefine stringval 1
22
23
24// cmakedefine01
25// 0
26#cmakedefine01 boolnoval
27
28// 1
29#cmakedefine01 booltrueval
30
31// 0
32#cmakedefine01 boolfalseval
33
34// 0
35#cmakedefine01 boolzeroval
36
37// 1
38#cmakedefine01 booloneval
39
40// 1
41#cmakedefine01 booltenval
42
43// 1
44#cmakedefine01 boolstringval
45
46
47// @ substition
48
49// no substition
50// @noval@
51
52// no substition
53// @noval@@noval@
54
55// no substition
56// @noval@.@noval@
57
58// 1
59// @trueval@
60
61// 0
62// @falseval@
63
64// 10
65// @trueval@@falseval@
66
67// 0.1
68// @falseval@.@trueval@
69
70// 0
71// @zeroval@
72
73// 1
74// @oneval@
75
76// 10
77// @tenval@
78
79// 01
80// @zeroval@@oneval@
81
82// 0.10
83// @zeroval@.@tenval@
84
85// test
86// @stringval@
87
88// testtest
89// @stringval@@stringval@
90
91// test.test
92// @stringval@.@stringval@
93
94// test10
95// @noval@@stringval@@trueval@@zeroval@
96
97// ${} substition
98
99// no substition
100// ${noval}
101
102// no substition
103// ${noval}${noval}
104
105// no substition
106// ${noval}.${noval}
107
108// 1
109// ${trueval}
110
111// 0
112// ${falseval}
113
114// 10
115// ${trueval}${falseval}
116
117// 0.1
118// ${falseval}.${trueval}
119
120// 0
121// ${zeroval}
122
123// 1
124// ${oneval}
125
126// 10
127// ${tenval}
128
129// 01
130// ${zeroval}${oneval}
131
132// 0.10
133// ${zeroval}.${tenval}
134
135// test
136// ${stringval}
137
138// testtest
139// ${stringval}${stringval}
140
141// test.test
142// ${stringval}.${stringval}
143
144// test10
145// ${noval}${stringval}${trueval}${zeroval}
test/standalone/cmakedefine/expected.h deleted-145
...@@ -1,145 +0,0 @@
1// cmakedefine
2// undefined
3/* #undef noval */
4
5// 1
6#define trueval 1
7
8// undefined
9/* #undef falseval */
10
11// undefined
12/* #undef zeroval */
13
14// 1
15#define oneval 1
16
17// 1
18#define tenval 1
19
20// 1
21#define stringval 1
22
23
24// cmakedefine01
25// 0
26#define boolnoval 0
27
28// 1
29#define booltrueval 1
30
31// 0
32#define boolfalseval 0
33
34// 0
35#define boolzeroval 0
36
37// 1
38#define booloneval 1
39
40// 1
41#define booltenval 1
42
43// 1
44#define boolstringval 1
45
46
47// @ substition
48
49// no substition
50//
51
52// no substition
53//
54
55// no substition
56// .
57
58// 1
59// 1
60
61// 0
62// 0
63
64// 10
65// 10
66
67// 0.1
68// 0.1
69
70// 0
71// 0
72
73// 1
74// 1
75
76// 10
77// 10
78
79// 01
80// 01
81
82// 0.10
83// 0.10
84
85// test
86// test
87
88// testtest
89// testtest
90
91// test.test
92// test.test
93
94// test10
95// test10
96
97// substition
98
99// no substition
100//
101
102// no substition
103//
104
105// no substition
106// .
107
108// 1
109// 1
110
111// 0
112// 0
113
114// 10
115// 10
116
117// 0.1
118// 0.1
119
120// 0
121// 0
122
123// 1
124// 1
125
126// 10
127// 10
128
129// 01
130// 01
131
132// 0.10
133// 0.10
134
135// test
136// test
137
138// testtest
139// testtest
140
141// test.test
142// test.test
143
144// test10
145// test10
test/standalone/cmakedefine/expected_config.h created+145
...@@ -0,0 +1,145 @@
1// cmakedefine
2// undefined
3/* #undef noval */
4
5// 1
6#define trueval 1
7
8// undefined
9/* #undef falseval */
10
11// undefined
12/* #undef zeroval */
13
14// 1
15#define oneval 1
16
17// 1
18#define tenval 1
19
20// 1
21#define stringval 1
22
23
24// cmakedefine01
25// 0
26#define boolnoval 0
27
28// 1
29#define booltrueval 1
30
31// 0
32#define boolfalseval 0
33
34// 0
35#define boolzeroval 0
36
37// 1
38#define booloneval 1
39
40// 1
41#define booltenval 1
42
43// 1
44#define boolstringval 1
45
46
47// @ substition
48
49// no substition
50//
51
52// no substition
53//
54
55// no substition
56// .
57
58// 1
59// 1
60
61// 0
62// 0
63
64// 10
65// 10
66
67// 0.1
68// 0.1
69
70// 0
71// 0
72
73// 1
74// 1
75
76// 10
77// 10
78
79// 01
80// 01
81
82// 0.10
83// 0.10
84
85// test
86// test
87
88// testtest
89// testtest
90
91// test.test
92// test.test
93
94// test10
95// test10
96
97// substition
98
99// no substition
100//
101
102// no substition
103//
104
105// no substition
106// .
107
108// 1
109// 1
110
111// 0
112// 0
113
114// 10
115// 10
116
117// 0.1
118// 0.1
119
120// 0
121// 0
122
123// 1
124// 1
125
126// 10
127// 10
128
129// 01
130// 01
131
132// 0.10
133// 0.10
134
135// test
136// test
137
138// testtest
139// testtest
140
141// test.test
142// test.test
143
144// test10
145// test10
test/standalone/cmakedefine/expected_error.h created+5
...@@ -0,0 +1,5 @@
1// bad interleave
2#define @STRV${AL_AT@TEXT}
3
4// bad interleave
5#define ${STRV@AL_AT}TEXT@
test/standalone/cmakedefine/expected_pwd.sh created+1
...@@ -0,0 +1 @@
1echo ${PWD}
test/standalone/cmakedefine/expected_sigil.h created+5
...@@ -0,0 +1,5 @@
1#define VAR
2#define AT @
3#define ATAT @@
4#define ATATAT @@@
5#define ATATATAT @@@@
test/standalone/cmakedefine/expected_stack.h created+7
...@@ -0,0 +1,7 @@
1#define NEST_UNDERSCORE_PROXY NEST_UNDERSCORE_PROXY
2#define UNDERSCORE UNDERSCORE
3
4#define NEST_UNDERSCORE_PROXY NEST_UNDERSCORE_PROXY
5#define UNDERSCORE UNDERSCORE
6
7#define (empty)
test/standalone/cmakedefine/expected_wrapper.h created+30
...@@ -0,0 +1,30 @@
1// becomes TEXT
2#define TEXT
3#define TEXT
4
5// becomes `at`TEXT`at`
6#define @TEXT@
7#define @TEXT@
8
9// becomes TRAP
10#define TRAP
11
12// becomes `dollar sign`{STRING}
13#define ${STRING}
14#define ${STRING}
15
16// becomes `dollar sign`{STRING}
17#define ${STRING}
18#define ${STRING}
19
20// becomes `dollar sign`{TEXT}
21#define ${TEXT}
22#define ${TEXT}
23
24// becomes `at`STRING`at`
25#define @STRING@
26#define @STRING@
27
28// becomes `empty`
29#define
30#define
test/standalone/cmakedefine/pwd.sh.in created+1
...@@ -0,0 +1 @@
1echo @DIR@
test/standalone/cmakedefine/sigil.h.in created+5
...@@ -0,0 +1,5 @@
1#define VAR ${}
2#define AT @
3#define ATAT @@
4#define ATATAT @@@
5#define ATATATAT @@@@
test/standalone/cmakedefine/stack.h.in created+7
...@@ -0,0 +1,7 @@
1#define NEST_UNDERSCORE_PROXY ${NEST${UNDERSCORE}PROXY}
2#define UNDERSCORE @NEST@UNDERSCORE@PROXY@
3
4#define NEST_UNDERSCORE_PROXY ${NEST${${NEST_UNDERSCORE${UNDERSCORE}PROXY}}PROXY}
5#define UNDERSCORE @NEST@@NEST_UNDERSCORE@UNDERSCORE@PROXY@@PROXY@
6
7#define (empty) ${NEST${${AT}UNDERSCORE${AT}}PROXY}
test/standalone/cmakedefine/wrapper.h.in created+30
...@@ -0,0 +1,30 @@
1// becomes TEXT
2#define @STRING@
3#define ${STRING}
4
5// becomes `at`TEXT`at`
6#define @${STRING}@
7#define @@STRING@@
8
9// becomes TRAP
10#define ${@STRING@}
11
12// becomes `dollar sign`{STRING}
13#define $@STRING_CURLY@
14#define $${STRING_CURLY}
15
16// becomes `dollar sign`{STRING}
17#define @STRING_VAR@
18#define ${STRING_VAR}
19
20// becomes `dollar sign`{TEXT}
21#define ${DOLLAR}{${STRING}}
22#define @DOLLAR@{${STRING}}
23
24// becomes `at`STRING`at`
25#define ${STRING_AT}
26#define @STRING_AT@
27
28// becomes `empty`
29#define ${${STRING_VAR}}
30#define ${@STRING_VAR@}