119 lines
4.4 KiB
C
119 lines
4.4 KiB
C
#define GEBS_NO_PREFIX
|
|
#define GEBS_IMPLEMENTATION
|
|
#include "gebs/gebs.h"
|
|
|
|
char *prog = NULL;
|
|
|
|
#define DEBUG 1
|
|
|
|
int main(int argc, char ** argv)
|
|
{
|
|
rebuild_self(argc, argv, "cc", "-o", "build", "build.c");
|
|
|
|
prog = SHIFT(&argc, &argv);
|
|
char *cmd = SHIFT(&argc, &argv);
|
|
if (strcmp(cmd, "make") == 0) {
|
|
RULE("./aboba",
|
|
"./main.c",
|
|
"./routes.c",
|
|
"./routes.h",
|
|
"./baked.c",
|
|
"./baked.h",
|
|
"./clonestr.h",
|
|
"./commit.h",
|
|
"./timer.c",
|
|
"./timer.h",
|
|
|
|
"./mongoose.o",
|
|
"./gpp1",
|
|
|
|
"./tmpls/home.html",
|
|
"./tmpls/page-missing.html",
|
|
"./tmpls/template-blog.html",
|
|
"./tmpls/blog.html",
|
|
|
|
"./etc/hotreload.js",
|
|
"./etc/simple.min.css",
|
|
|
|
"./blog/welcome.md",
|
|
"./blog/weird-page.md",
|
|
"./blog/curious-case-of-gebs.md"
|
|
) {
|
|
|
|
RULE("./mongoose.o", "./mongoose/mongoose.c") {
|
|
#if DEBUG
|
|
CMD("cc", "-ggdb", "-c", "-fPIC", "-Wl,-z,execstack", "-D_GNU_SOURCE",
|
|
"-o", "./mongoose.o", "./mongoose/mongoose.c");
|
|
#else
|
|
CMD("cc", "-c", "-fPIC", "-Wl,-z,exectack", "-D_GNU_SOURCE", "-o",
|
|
"./mongoose.o", "./mongoose/mongoose.c");
|
|
#endif
|
|
}
|
|
|
|
RULE("./gpp1", "./gpp/gpp.c") {
|
|
CMD("cc", "-DHAVE_STRDUP", "-DHAVE_FNMATCH_H", "-o", "gpp1", "gpp/gpp.c");
|
|
}
|
|
|
|
RULE("./commit.h") {
|
|
String_Builder commit = {0};
|
|
defer { sb_free(&commit); }
|
|
Cmd commit_get_cmd = {0};
|
|
defer { cmd_free(&commit_get_cmd); }
|
|
cmd_append(&commit_get_cmd, "git");
|
|
cmd_append(&commit_get_cmd, "rev-parse");
|
|
cmd_append(&commit_get_cmd, "HEAD");
|
|
cmd_run_collect(&commit_get_cmd, &commit);
|
|
commit.items[commit.count - 2] = '\0'; // \n -> \0
|
|
|
|
LOGI("Commit %s\n", commit.items);
|
|
|
|
String_Builder header = {0};
|
|
defer { sb_free(&header); }
|
|
|
|
sb_append_nstr(&header, "#ifndef COMMIT_H_\n");
|
|
sb_append_nstr(&header, "#define COMMIT_H_\n");
|
|
sb_append_nstr(&header, fmt("#define COMMIT_STRING \"%s\"\n", commit.items));
|
|
sb_append_nstr(&header, "#endif // COMMIT_H_\n");
|
|
|
|
FILE *out = fopen("./commit.h", "w");
|
|
if (out) {
|
|
fwrite(header.items, header.count, 1, out);
|
|
fclose(out);
|
|
}
|
|
}
|
|
|
|
#if DEBUG
|
|
CMD("cc", "-fPIC", "-ggdb", "-I.", "-DDEBUG=1", "-D_GNU_SOURCE", "-DGEBS_NO_PREFIX",
|
|
"-DINCBIN_PREFIX=", "-DINCBIN_STYLE=INCBIN_STYLE_SNAKE", "-Wl,-z,execstack", "-o", "./aboba",
|
|
"./main.c", "./routes.c", "./baked.c", "./timer.c", "./mongoose.o", "./cJSON/cJSON.c",
|
|
"./md5-c/md5.c",
|
|
"-lpthread");
|
|
#else
|
|
CMD("cc", "-fPIC", "-I.", "-D_GNU_SOURCE", "-DGEBS_NO_PREFIX",
|
|
"-DINCBIN_PREFIX=", "-DINCBIN_STYLE=INCBIN_STYLE_SNAKE", "-Wl,-z,execstack", "-o", "./aboba",
|
|
"./main.c", "./routes.c", "./baked.c", "./timer.c", "./mongoose.o", "./cJSON/cJSON.c",
|
|
"./md5-c/md5.c",
|
|
"-lpthread");
|
|
#endif
|
|
}
|
|
} else if (strcmp(cmd, "clean") == 0) {
|
|
remove1("./build");
|
|
remove1("./aboba");
|
|
remove("./mongoose.o");
|
|
remove("./gpp1");
|
|
remove("./watcher");
|
|
} else if (strcmp(cmd, "make-watcher") == 0) {
|
|
CMD("cc", "-o", "watcher", "watcher.c");
|
|
} else if (strcmp(cmd, "watch") == 0) {
|
|
CMD("./watcher", ".", "sh", "-c", "./build make && ./aboba");
|
|
} else if (strcmp(cmd, "help") == 0) {
|
|
LOGI("Help:\n");
|
|
printf("%s make Build the application\n", prog);
|
|
printf("%s clean Clean build atrifacts\n", prog);
|
|
printf("%s make-watcher Bootstrap source code watcher (hot recompiling)\n", prog);
|
|
printf("%s watch Watch the source code and recompile+rerun on change\n", prog);
|
|
}
|
|
|
|
return 0;
|
|
}
|