diff --git a/c-out/bin/yait b/c-out/bin/yait new file mode 100755 index 0000000..be4c4bf Binary files /dev/null and b/c-out/bin/yait differ diff --git a/c-out/obj/main.o b/c-out/obj/main.o new file mode 100644 index 0000000..0a906d9 Binary files /dev/null and b/c-out/obj/main.o differ diff --git a/c-out/obj/yait.o b/c-out/obj/yait.o new file mode 100644 index 0000000..f94523f Binary files /dev/null and b/c-out/obj/yait.o differ diff --git a/config.mak b/config.mak new file mode 100644 index 0000000..d6ba4f4 --- /dev/null +++ b/config.mak @@ -0,0 +1,4 @@ +PREFIX=/usr/bin/ +CFLAGS=-Wall -Wextra -O2 +LDFLAGS= +CC=gcc diff --git a/yait/debug.h b/yait/debug.h new file mode 100644 index 0000000..ea25e5b --- /dev/null +++ b/yait/debug.h @@ -0,0 +1,35 @@ +#ifndef DEBUG_H +#define DEBUG_H + +#ifdef DEBUG +#define on_error(msg, code) \ + if (err) \ + { \ + fprintf (stderr, "\n"); \ + printfn (msg ": %s", strerror (err)); \ + return code; \ + } +#else +#define on_error(msg, code) \ + if (err) \ + { \ + printfn (msg ": %s", strerror (err)); \ + return code; \ + } +#endif + +#ifdef DEBUG +#define debug(fmt, ...) \ + fprintf (stderr, "\e[0;32m[%8d]\e[0;33m " fmt "\e[0m\n", __LINE__, \ + ##__VA_ARGS__) +#define debugc(fmt, ...) \ + fprintf (stderr, "\e[0;32m[%8d]\e[0;33m " fmt "... \e[0m", __LINE__, \ + ##__VA_ARGS__) +#define done fprintf (stderr, "done.\n") +#else +#define debug(fmt, ...) ((void)0) +#define debugc(fmt, ...) ((void)0) +#define done ((void)0) +#endif + +#endif // DEBUG_H diff --git a/yait/main.c b/yait/main.c index a11b70f..6051dcb 100644 --- a/yait/main.c +++ b/yait/main.c @@ -23,6 +23,7 @@ #include "../core/standard.h" #include "contents.h" #include "format.h" +#include "debug.h" #define DEFAULT_USER_NAME "unknown" #define DEFAULT_PROJECT_NAME "Project" @@ -30,55 +31,13 @@ #define DEFAULT_GIT_INIT true #define DEFAULT_CLANG_FORMAT true -#define print_option(option, description) \ - printf (" %-20s %-20s\n", option, description) - -#ifdef DEBUG -#define on_error(msg, code) \ - if (err) \ - { \ - fprintf (stderr, "\n"); \ - printfn (msg ": %s", strerror (err)); \ - return code; \ - } -#else -#define on_error(msg, code) \ - if (err) \ - { \ - printfn (msg ": %s", strerror (err)); \ - return code; \ - } -#endif - -#ifdef DEBUG -#define debug(fmt, ...) \ - fprintf (stderr, "\e[0;32m[%8d]\e[0;33m " fmt "\e[0m\n", __LINE__, \ - ##__VA_ARGS__) -#define debugc(fmt, ...) \ - fprintf (stderr, "\e[0;32m[%8d]\e[0;33m " fmt "... \e[0m", __LINE__, \ - ##__VA_ARGS__) -#define done fprintf (stderr, "done.\n") -#else -#define debug(fmt, ...) -#define debugc(fmt, ...) -#define done -#endif - -int create_license (format_t); -int create_configure (); -int create_makefile (format_t); -int create_project (format_t); -int generate_source_code (format_t); -int maybe_apply_clang_format (format_t); -int reset_path_ (); -int sanitize (format_t *); -int setup_git (format_t); -int parse_arguments (format_t *, int, char **); - /* This is to keep track of how deep we are within the project tree. This is used in reset_path */ int depth; +#define print_option(option, description) \ + printf (" %-20s %-20s\n", option, description) + void usage (int status) { @@ -102,94 +61,6 @@ usage (int status) printf (" --version output version information and exit\n"); } -int -main (int argc, char **argv) -{ - int err; - - if (argc < 2) - { - printfn ("error: not enough arguments."); - return 1; - } - - err = initialize_main (&argc, &argv); - err = parse_standard_options (usage, argc, argv); - - if (err && err != HELP_REQUESTED) - { - printfn ("error: %s", strerror (err)); - return err; - } - - format_t conf = { 0 }; - - // TODO: Argument Parsing - conf.project = "sample_project"; - conf.name = "vx_clutch"; - - if (!conf.name) - { - struct passwd *pw = getpwuid (getuid ()); - conf.name = (pw && pw->pw_name) ? pw->pw_name : DEFAULT_USER_NAME; - } - - conf.flag.git = DEFAULT_GIT_INIT; - conf.flag.clang_format = DEFAULT_CLANG_FORMAT; - conf.license = DEFAULT_LICENSE; - - err = create_project (conf); - if (!err) - debug ("project made successfully"); - else - debug ("something when wrong"); - - return err; -} - -int -create_project (format_t fmt) -{ - int err; - - debugc ("sanitize"); - err = sanitize (&fmt); - on_error ("failed to sanitize format", err); - done; - - debugc ("take %s", fmt.project); - err = create_and_enter_directory (fmt.project); - depth = 0; - on_error ("failed to create or enter directory", err); - done; - - // debug ("create licenseing"); - // err = create_license_if_needed (fmt); - // on_error ("failed to create license", err); - - debugc ("create makefile"); - err = create_makefile (fmt); - on_error ("failed to create Makefile", err); - done; - - debug ("setup git"); - err = setup_git (fmt); - if (err) - printfn ("warning: git initialization failed: %s", strerror (err)); - - debug ("create .clang-format"); - err = maybe_apply_clang_format (fmt); - if (err) - printfn ("warning: clang-format setup failed: %s", strerror (err)); - - debugc ("generate source code"); - err = generate_source_code (fmt); - on_error ("failed to generate source code", err); - done; - - return 0; -} - /* This macro exist purely because I like how it looks. */ #define reset_path reset_path_ () int @@ -405,3 +276,91 @@ parse_arguments (format_t *conf, int argc, char **argv) } return 0; } + +int +create_project (format_t fmt) +{ + int err; + + debugc ("sanitize"); + err = sanitize (&fmt); + on_error ("failed to sanitize format", err); + done; + + debugc ("take %s", fmt.project); + err = create_and_enter_directory (fmt.project); + depth = 0; + on_error ("failed to create or enter directory", err); + done; + + // debug ("create licenseing"); + // err = create_license_if_needed (fmt); + // on_error ("failed to create license", err); + + debugc ("create makefile"); + err = create_makefile (fmt); + on_error ("failed to create Makefile", err); + done; + + debug ("setup git"); + err = setup_git (fmt); + if (err) + printfn ("warning: git initialization failed: %s", strerror (err)); + + debug ("create .clang-format"); + err = maybe_apply_clang_format (fmt); + if (err) + printfn ("warning: clang-format setup failed: %s", strerror (err)); + + debugc ("generate source code"); + err = generate_source_code (fmt); + on_error ("failed to generate source code", err); + done; + + return 0; +} + +int +main (int argc, char **argv) +{ + int err; + + if (argc < 2) + { + printfn ("error: not enough arguments."); + return 1; + } + + err = initialize_main (&argc, &argv); + err = parse_standard_options (usage, argc, argv); + + if (err && err != HELP_REQUESTED) + { + printfn ("error: %s", strerror (err)); + return err; + } + + format_t conf = { 0 }; + + // TODO: Argument Parsing + conf.project = "sample_project"; + conf.name = "vx_clutch"; + + if (!conf.name) + { + struct passwd *pw = getpwuid (getuid ()); + conf.name = (pw && pw->pw_name) ? pw->pw_name : DEFAULT_USER_NAME; + } + + conf.flag.git = DEFAULT_GIT_INIT; + conf.flag.clang_format = DEFAULT_CLANG_FORMAT; + conf.license = DEFAULT_LICENSE; + + err = create_project (conf); + if (!err) + debug ("project made successfully"); + else + debug ("something when wrong"); + + return err; +}