A static site generator, written in C
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

main.c 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #include <string.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include "cms_util.h"
  5. #include "cms_err.h"
  6. #include "cms_files.h"
  7. #include "cms_page.h"
  8. #include "cms_build.h"
  9. int main(int argc, char** argv)
  10. {
  11. if (argc < 2)
  12. {
  13. fprintf(stderr, "Usage: %s <init|build>\n", argv[0]);
  14. return 1;
  15. }
  16. //Initiate
  17. if (strcmp(argv[1], "init") == 0)
  18. {
  19. if (argc != 3)
  20. {
  21. fprintf(stderr, "Usage: %s init <directory>\n", argv[0]);
  22. return 1;
  23. }
  24. char* dirname = argv[2];
  25. //Get the path of .cmsinited, which tells us
  26. //whether or not the directory is already inited
  27. char* initedPath = cms_util_path_join(dirname, CMS_FILE_INITED);
  28. if (initedPath == NULL)
  29. cms_err_panic(cms_err_create(CMS_ERR_ALLOC, NULL));
  30. //Panic if the directory is already initiated
  31. if (cms_util_file_exists(initedPath))
  32. cms_err_panic(cms_err_create(CMS_ERR_INITED, NULL));
  33. //Copy files from resources
  34. cms_err* err;
  35. err = cms_util_dir_copy_recursive(CMS_FILE_RESOURCES, dirname);
  36. if (err)
  37. cms_err_panic(err);
  38. //Create .cmsinited file
  39. err = cms_util_file_create(initedPath);
  40. if (err)
  41. cms_err_panic(err);
  42. }
  43. //Build
  44. else if (strcmp(argv[1], "build") == 0)
  45. {
  46. if (argc != 3)
  47. {
  48. fprintf(stderr, "Usage: %s build <directory>\n", argv[0]);
  49. return 1;
  50. }
  51. char* dirname = argv[2];
  52. //Get the path of .cmsinited, which tells us
  53. //whether or not the directory is already inited
  54. char* initedPath = cms_util_path_join(dirname, CMS_FILE_INITED);
  55. //Panic if the directory isn't initiated
  56. if (!cms_util_file_exists(initedPath))
  57. cms_err_panic(cms_err_create(CMS_ERR_NOTINITED, NULL));
  58. cms_page* root = cms_page_create();
  59. if (root == NULL)
  60. cms_err_panic(cms_err_create(CMS_ERR_ALLOC, NULL));
  61. root->slug = "";
  62. root->title = "";
  63. char* path = cms_util_path_join(dirname, CMS_FILE_ROOT);
  64. if (path == NULL)
  65. cms_err_panic(cms_err_create(CMS_ERR_ALLOC, NULL));
  66. //Build tree of pages and posts
  67. cms_err* err;
  68. err = cms_build_make_tree(root, path, NULL);
  69. free(path);
  70. if (err)
  71. cms_err_panic(err);
  72. char* outpath = cms_util_path_join(dirname, CMS_FILE_OUT);
  73. if (outpath == NULL)
  74. cms_err_panic(cms_err_create(CMS_ERR_ALLOC, NULL));
  75. err = cms_build_write_files(root, outpath, dirname);
  76. if (err)
  77. cms_err_panic(err);
  78. }
  79. //Nothing, print usage
  80. else
  81. {
  82. fprintf(stderr, "Usage: %s <init|build>\n", argv[0]);
  83. return 1;
  84. }
  85. }