Skip to content

Commit da1deeb

Browse files
committed
introduce nob_main define
1 parent 84b452f commit da1deeb

3 files changed

Lines changed: 42 additions & 16 deletions

File tree

nob.c

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -51,32 +51,30 @@ bool build_and_run_test(Cmd *cmd, const char *test_name)
5151
return true;
5252
}
5353

54-
int main(int argc, char **argv)
54+
nob_main(int argc, char **argv, Cmd *cmd)
5555
{
5656
NOB_GO_REBUILD_URSELF_PLUS(argc, argv, "nob.h", "shared.h");
5757

58-
Cmd cmd = {0};
59-
6058
const char *program_name = shift(argv, argc);
6159
const char *command_name = "test";
6260
if (argc > 0) command_name = shift(argv, argc);
6361

64-
if (!mkdir_if_not_exists(BUILD_FOLDER)) return 1;
65-
if (!mkdir_if_not_exists(BUILD_FOLDER TESTS_FOLDER)) return 1;
62+
if (!mkdir_if_not_exists(BUILD_FOLDER)) return false;
63+
if (!mkdir_if_not_exists(BUILD_FOLDER TESTS_FOLDER)) return false;
6664

6765
if (strcmp(command_name, "test") == 0) {
6866
if (argc <= 0) {
6967
for (size_t i = 0; i < test_names_count; ++i) {
70-
if (!build_and_run_test(&cmd, test_names[i])) return 1;
68+
if (!build_and_run_test(cmd, test_names[i])) return false;
7169
}
72-
return 0;
70+
return true;
7371
}
7472

7573
while (argc > 0) {
7674
const char *test_name = shift(argv, argc);
77-
if (!build_and_run_test(&cmd, test_name)) return 1;
75+
if (!build_and_run_test(cmd, test_name)) return false;
7876
}
79-
return 0;
77+
return true;
8078
}
8179

8280
if (strcmp(command_name, "list") == 0) {
@@ -85,9 +83,9 @@ int main(int argc, char **argv)
8583
nob_log(INFO, " %s", test_names[i]);
8684
}
8785
nob_log(INFO, "Use %s test <names...> to run individual tests", program_name);
88-
return 0;
86+
return true;
8987
}
9088

9189
nob_log(ERROR, "Unknown command %s", command_name);
92-
return 1;
90+
return false;
9391
}

nob.h

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1876,6 +1876,34 @@ NOBDEF bool nob_set_current_dir(const char *path)
18761876
#endif // _WIN32
18771877
}
18781878

1879+
#define NOB_MAIN_ARGS_1
1880+
#define NOB_MAIN_ARGS_2 argc, argv
1881+
#define NOB_MAIN_ARGS_3 argc, argv, &cmd
1882+
#define NOB_MAIN_ARGS_4 argc, argv, &cmd, &procs
1883+
#define SELECT_NOB_MAIN_ARGS(_1, _2, _3, _4, NAME, ...) NAME
1884+
1885+
#define nob_main(...) \
1886+
NOBDEF bool nob_main_implementation(__VA_ARGS__); \
1887+
int main(int argc, char **argv) \
1888+
{ \
1889+
NOB_UNUSED(argc); \
1890+
NOB_UNUSED(argv); \
1891+
Nob_Cmd cmd = {0}; \
1892+
NOB_UNUSED(cmd); \
1893+
Nob_Procs procs = {0}; \
1894+
NOB_UNUSED(procs); \
1895+
if (!nob_main_implementation( \
1896+
SELECT_NOB_MAIN_ARGS(__VA_ARGS__, \
1897+
NOB_MAIN_ARGS_4, \
1898+
NOB_MAIN_ARGS_3, \
1899+
NOB_MAIN_ARGS_2, \
1900+
NOB_MAIN_ARGS_1, \
1901+
) \
1902+
)) return 1; \
1903+
return 0; \
1904+
} \
1905+
NOBDEF bool nob_main_implementation(__VA_ARGS__)
1906+
18791907
// minirent.h SOURCE BEGIN ////////////////////////////////////////
18801908
#if defined(_WIN32) && !defined(NOB_NO_MINIRENT)
18811909
struct DIR

tests/cmd_args_passing.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#define NOB_STRIP_PREFIX
33
#include "nob.h"
44

5-
int main(void)
5+
nob_main(void)
66
{
77
Cmd cmd = {0};
88

@@ -15,21 +15,21 @@ int main(void)
1515
" }\n"
1616
" return 0;\n"
1717
"}\n";
18-
if (!write_entire_file("print_args.c", print_args_src, strlen(print_args_src))) return 1;
18+
if (!write_entire_file("print_args.c", print_args_src, strlen(print_args_src))) return false;
1919

2020
nob_cc(&cmd);
2121
nob_cc_flags(&cmd);
2222
nob_cc_output(&cmd, "print_args");
2323
nob_cc_inputs(&cmd, "print_args.c");
24-
if (!cmd_run_sync_and_reset(&cmd)) return 1;
24+
if (!cmd_run_sync_and_reset(&cmd)) return false;
2525

2626
cmd_append(&cmd, "./print_args");
2727
cmd_append(&cmd, "foo");
2828
cmd_append(&cmd, "bar");
2929
cmd_append(&cmd, "Hello, world");
3030
cmd_append(&cmd, "\"Hello, world\"");
3131
cmd_append(&cmd, "\"\\` %$*@");
32-
if (!cmd_run_sync_and_reset(&cmd)) return 1;
32+
if (!cmd_run_sync_and_reset(&cmd)) return false;
3333

34-
return 0;
34+
return true;
3535
}

0 commit comments

Comments
 (0)