X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=tools%2Fccanlint%2Fcompulsory_tests%2Finfo_exists.c;fp=tools%2Fccanlint%2Fcompulsory_tests%2Finfo_exists.c;h=a9a6c1c993a77c532515fe5c92eef282cccafba9;hp=0000000000000000000000000000000000000000;hb=051db34fb275491d4d5dfa5bf7970e8e525766d8;hpb=2926cafb52b9d95646d9dafa877d53f2368d8b2c diff --git a/tools/ccanlint/compulsory_tests/info_exists.c b/tools/ccanlint/compulsory_tests/info_exists.c new file mode 100644 index 00000000..a9a6c1c9 --- /dev/null +++ b/tools/ccanlint/compulsory_tests/info_exists.c @@ -0,0 +1,85 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static void check_has_info(struct manifest *m, + bool keep, + unsigned int *timeleft, + struct score *score) +{ + if (m->info_file) { + score->pass = true; + score->score = score->total; + } else { + score->error = "You have no _info file.\n\n" + "The file _info contains the metadata for a ccan package: things\n" + "like the dependencies, the documentation for the package as a whole\n" + "and license information.\n"; + } +} + +static const char template[] = + "#include \n" + "#include \"config.h\"\n" + "\n" + "/**\n" + " * %s - YOUR-ONE-LINE-DESCRIPTION-HERE\n" + " *\n" + " * This code ... YOUR-BRIEF-SUMMARY-HERE\n" + " *\n" + " * Example:\n" + " * FULLY-COMPILABLE-INDENTED-TRIVIAL-BUT-USEFUL-EXAMPLE-HERE\n" + " */\n" + "int main(int argc, char *argv[])\n" + "{\n" + " /* Expect exactly one argument */\n" + " if (argc != 2)\n" + " return 1;\n" + "\n" + " if (strcmp(argv[1], \"depends\") == 0) {\n" + " PRINTF-CCAN-PACKAGES-YOU-NEED-ONE-PER-LINE-IF-ANY\n" + " return 0;\n" + " }\n" + "\n" + " return 1;\n" + "}\n"; + +static void create_info_template(struct manifest *m, struct score *score) +{ + FILE *info; + const char *filename; + + if (!ask("Should I create a template _info file for you?")) + return; + + filename = talloc_asprintf(m, "%s/%s", m->dir, "_info"); + info = fopen(filename, "w"); + if (!info) + err(1, "Trying to create a template _info in %s", filename); + + if (fprintf(info, template, m->basename) < 0) { + unlink_noerr(filename); + err(1, "Writing template into %s", filename); + } + fclose(info); +} + +struct ccanlint info_exists = { + .key = "info_exists", + .name = "Module has _info file", + .check = check_has_info, + .handle = create_info_template, + .needs = "" +}; + +REGISTER_TEST(info_exists);