From c48809aea91c738f96bfd3eb68d012c409ad70c3 Mon Sep 17 00:00:00 2001 From: vx-clutch Date: Fri, 1 Aug 2025 21:32:27 -0400 Subject: [PATCH] save --- TODO | 6 ++ c-out/bin/yait | Bin 0 -> 42856 bytes c-out/obj/main.o | Bin 0 -> 30104 bytes config.mak | 4 + yait/contents.h | 8 +- yait/debug.h | 4 +- yait/format.h | 71 +++++++------ yait/main.c | 256 ++++++++++++++++++++++++++++------------------- 8 files changed, 209 insertions(+), 140 deletions(-) create mode 100644 TODO create mode 100755 c-out/bin/yait create mode 100644 c-out/obj/main.o create mode 100644 config.mak diff --git a/TODO b/TODO new file mode 100644 index 0000000..edf0753 --- /dev/null +++ b/TODO @@ -0,0 +1,6 @@ +1 Fix arg parseing +2 Fix generated Makefile +3 Add Licence + +Ideas +1 Add --is-lib diff --git a/c-out/bin/yait b/c-out/bin/yait new file mode 100755 index 0000000000000000000000000000000000000000..45bcda491b53355ad311652e7a112aa2ddc242e4 GIT binary patch literal 42856 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 literal 0 HcmV?d00001 diff --git a/c-out/obj/main.o b/c-out/obj/main.o new file mode 100644 index 0000000000000000000000000000000000000000..852309887772b9c44f75e6ac6d42c11d163b41c0 GIT binary patch literal 30104 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 KJ))?~|9=2;?`HA< literal 0 HcmV?d00001 diff --git a/config.mak b/config.mak new file mode 100644 index 0000000..fcef174 --- /dev/null +++ b/config.mak @@ -0,0 +1,4 @@ +PREFIX=/usr/bin/ +CFLAGS=-Wall -Wextra -ggdb +LDFLAGS= +CC=clang diff --git a/yait/contents.h b/yait/contents.h index 95c6d59..bf36f41 100644 --- a/yait/contents.h +++ b/yait/contents.h @@ -59,9 +59,7 @@ char *configure_template = line ("done") line () line ("printf \"checking for C compiler... \"") - line ("trycc gcc") - line ("trycc cc") - line ("trycc clang") + line ("%s") line ("printf \"%s\\n\" \"$CC\"") line () line ("printf \"checking weather C compiler works... \"") @@ -87,7 +85,7 @@ char *makefile_template = line ("prefix = /usr/bin") line () line ("%s_SRCS := $(shell find . -name '%s/*.c')") - line ("%s_OBJS := $(patsubst ./%.c,c-out/obj/%%.o,$(%s_SRCS))") + line ("%s_OBJS := $(patsubst ./%%.c,c-out/obj/%%.o,$(%s_SRCS))") line () line ("%s := c-out/bin/%s") line () @@ -127,7 +125,7 @@ char *makefile_template = line ("dist-clean: clean") line ("\trm -f config.mak") line () - line (".PHONY: all clean dist-clean install uninstall build format"); + line (".PHONY: all clean dist-clean install uninstall"); /* .clang-format template */ char *clang_format_template = diff --git a/yait/debug.h b/yait/debug.h index ea25e5b..be71958 100644 --- a/yait/debug.h +++ b/yait/debug.h @@ -11,9 +11,9 @@ } #else #define on_error(msg, code) \ - if (err) \ + if (code) \ { \ - printfn (msg ": %s", strerror (err)); \ + printfn (msg ": %s", strerror (code)); \ return code; \ } #endif diff --git a/yait/format.h b/yait/format.h index 106c23b..6c45aff 100644 --- a/yait/format.h +++ b/yait/format.h @@ -1,41 +1,39 @@ /* Copyright (C) vx_clutch - * + * * This file is part of yait * * This project and file is licenced under the BSD-3-Clause licence. - * + * */ #ifndef FORMAT_H #define FORMAT_H #include +#include -/* License type enumeration */ typedef enum { - BSD3, /* BSD 3-Clause License */ - GPLv3, /* GNU General Public License v3 */ - MIT, /* MIT License */ - UNlICENSE, /* Unlicense */ -} license_t; + BSD3, /* BSD 3-Clause Licence */ + GPLv3, /* GNU General Public Licence v3 */ + MIT, /* MIT Licence */ + UNLICENCE, /* Unlicence */ + LICENCE_HELP, /* Help case */ +} licence_t; -/* Library type enumeration - using bit flags for multiple selection */ +/* A bit field is used so that we can accomplish two things. (a) store lots of + libraries without taxing memory; and (b) a dynamic array is not neccescary. + */ typedef enum { - LIB_NONE = 0, /* No libraries selected */ - LIB_RAYLIB = 1 << 0, /* Raylib game library */ - LIB_WINAPI = 1 << 1, /* Windows API */ - LIB_CURL = 1 << 2, /* cURL library */ - /* Future libraries can be added here: - * LIB_OPENGL = 1 << 3, - * LIB_SDL2 = 1 << 4, - * LIB_GTK = 1 << 5, - * etc. - */ + LIB_NONE = 0, /* No libraries selected */ + LIB_RAYLIB = 1 << 0, /* Raylib game library */ + LIB_NCURSES = 1 << 1, /* Windows API */ + LIB_CURL = 1 << 2, /* cURL library */ + LIB_COUNT_, /* Number of Libraries */ + LIB_HELP, /* Help case */ } lib_flags_t; -/* Flag option type struct */ typedef struct { bool GNU; @@ -44,26 +42,39 @@ typedef struct bool use_cpp; } flags_t; -/* Project configuration structure */ typedef struct { - license_t license; /* License type for the project */ - char *project; /* Project name */ - char *name; /* Author/creator name */ + licence_t licence; /* Licence type for the project */ + char *project; /* Project name */ + char *name; /* Author/creator name ( if not provided infered on sanitize ) */ lib_flags_t libraries; /* Selected libraries (bit field) */ flags_t flag; /* Flags */ -} format_t; +} manifest_t; -/* Default values */ -#define DEFAULT_LICENSE BSD3 -#define DEFAULT_GIT_INIT true #define DEFAULT_CLANG_FORMAT true +#define DEFAULT_GIT_INIT true +#define DEFAULT_GNU false #define DEFAULT_LIBRARIES LIB_NONE +#define DEFAULT_LICENCE BSD3 -/* Helper macros for library operations */ #define HAS_LIBRARY(libs, lib) ((libs) & (lib)) #define ADD_LIBRARY(libs, lib) ((libs) |= (lib)) #define REMOVE_LIBRARY(libs, lib) ((libs) &= ~(lib)) -#define CLEAR_LIBRARIES(libs) ((libs) = LIB_NONE) + +static lib_flags_t +TOlibrary (char *src) +{ + if (strcmp (src, "raylib")) + return LIB_RAYLIB; + if (strcmp (src, "ncurse")) + return LIB_NCURSES; + if (strcmp (src, "ncurses")) + return LIB_NCURSES; + if (strcmp (src, "curl")) + return LIB_CURL; + if (strcmp (src, "help")) + return LIB_HELP; + return LIB_COUNT_; /* bad case */ +} #endif diff --git a/yait/main.c b/yait/main.c index 328d31a..f310ab3 100644 --- a/yait/main.c +++ b/yait/main.c @@ -3,8 +3,8 @@ * This file is part of yait * * This project and file is licenced under the BSD-3-Clause licence. - * - */ + * + */ // Usage: yait [OPTION]... PROJECT [NAME] @@ -22,22 +22,23 @@ #include "../core/print.h" #include "../core/standard.h" #include "contents.h" -#include "format.h" #include "debug.h" +#include "format.h" #define DEFAULT_USER_NAME "unknown" #define DEFAULT_PROJECT_NAME "Project" -#define DEFAULT_LICENSE BSD3 +#define DEFAULT_LICENCE BSD3 #define DEFAULT_GIT_INIT true #define DEFAULT_CLANG_FORMAT true /* This is to keep track of how deep we are within - the project tree. This is used in reset_path */ + the project tree. This is used in reset_path_ () */ int depth; #define print_option(option, description) \ printf (" %-20s %-20s\n", option, description) +// clang-format off static void usage (int status) { @@ -50,18 +51,20 @@ usage (int status) printf ("Usage: yait [OPTION]... PROJECT [NAME]\n"); printf ("Creates a C project with opinionated defaults.\n"); printf ("When only given the first argument it will detect your name.\n\n"); - printf ("Mandatory arguments to long options are mandatory for short " - "options too\n"); - print_option ("-l, --license=NAME", - "Set license (gpl, mit, bsd) [default: bsd]"); + printf ("Mandatory arguments to long options are mandatory for short options too\n"); + print_option ("-l, --licence=NAME", "Set licence (gpl, mit, bsd) [default: bsd]"); + print_option ("--lib=LIB", "Add a library to the project. You can list libraries with --lib=help."); print_option ("--use-cpp", "Uses the CPP language instead of C"); print_option ("--git", "Initialize git repository"); print_option ("--GNU", "Adds standard GNU argument parsing to your project"); printf (" --help display this help text and exit\n"); printf (" --version output version information and exit\n"); } +// clang-format on -/* This macro exist purely because I like how it looks. */ +/* This macro exist purely because I like how it looks. This should be called + in every function that creates file to ensure they are being created in + right place. */ #define reset_path reset_path_ () static int reset_path_ () @@ -77,43 +80,78 @@ reset_path_ () } static int -sanitize (format_t *fmt) +sanitize (manifest_t *m) { - if (!fmt->project) - fmt->project = DEFAULT_PROJECT_NAME; - if (!fmt->name) - fmt->name = DEFAULT_USER_NAME; - if (fmt->license != BSD3 && fmt->license != GPLv3 && fmt->license != MIT) - fmt->license = DEFAULT_LICENSE; - fmt->flag.git = fmt->flag.git ? true : DEFAULT_GIT_INIT; - fmt->flag.clang_format - = fmt->flag.clang_format ? true : DEFAULT_CLANG_FORMAT; - fmt->flag.GNU = fmt->flag.GNU ? true : false; + if (!m->project) + m->project = DEFAULT_PROJECT_NAME; + if (!m->name) + m->name = DEFAULT_USER_NAME; + if (!(m->licence == UNLICENCE)) + m->licence = DEFAULT_LICENCE; + m->flag.git = m->flag.git ? true : DEFAULT_GIT_INIT; + m->flag.clang_format = m->flag.clang_format ? true : DEFAULT_CLANG_FORMAT; + m->flag.GNU = m->flag.GNU ? true : DEFAULT_GNU; return 0; } +#define get(url) status = system ("git submodule add -q " url) static int -create_license (format_t fmt, char **license_line_buffer) +create_libraries (manifest_t manifest) { - if (fmt.license == UNlICENSE) + int status = 0; + + if (!manifest.libraries) + { + return status; + } + + reset_path; + + for (int i = 0; i < LIB_COUNT_; ++i) + { + if HAS_LIBRARY (manifest.libraries, LIB_RAYLIB) + { + REMOVE_LIBRARY (manifest.libraries, LIB_RAYLIB); + get ("https://github.com/raysan5/raylib"); + } + else if HAS_LIBRARY (manifest.libraries, LIB_NCURSES) + { + REMOVE_LIBRARY (manifest.libraries, LIB_NCURSES); + get ("https://github.com/mirror/ncurses"); + } + else if HAS_LIBRARY (manifest.libraries, LIB_CURL) + { + REMOVE_LIBRARY (manifest.libraries, LIB_CURL); + get ("https://github.com/raysan5/raylib"); + } + reset_path; + } + + return status; +} + +static int +create_licence (manifest_t manifest, char **licence_line_buffer) +{ + if (manifest.licence == UNLICENCE) return 0; reset_path; - /* TODO: Run better checks on license_line_buffer to ensure we have enough + /* TODO: Run better checks on licence_line_buffer to ensure we have enough space. This could be done through a multitude of ways; that is for you to - figure out. */ - assert (license_line_buffer != NULL); + figure out. */ + assert (licence_line_buffer != NULL); // TODO: Remove this and actually implement the features. #define TODO() \ printfn ("Not impl"); \ assert (1 == 2) - switch (fmt.license) + switch (manifest.licence) { case BSD3: - *license_line_buffer = "Bsd"; + *licence_line_buffer = "Bsd"; TODO (); break; case GPLv3: @@ -122,9 +160,9 @@ create_license (format_t fmt, char **license_line_buffer) case MIT: TODO (); break; - case UNlICENSE: + case UNLICENCE: default: - printfn ("bad logic in create_license_and_set_license_line()"); + printfn ("bad logic in create_licence ()"); return 1; } @@ -132,36 +170,35 @@ create_license (format_t fmt, char **license_line_buffer) } static int -maybe_apply_clang_format (format_t fmt) +maybe_create_clang_format (manifest_t manifest) { - if (!fmt.flag.clang_format) + if (!manifest.flag.clang_format) return 0; reset_path; - char *clang_fmt = "BasedOnStyle: LLVM\nIndentWidth: 2\nUseTab: Never\n"; - return create_file_with_content (".clang-format", clang_fmt, 0, NULL); + return create_file_with_content (".clang-format", clang_format_template); } static int -setup_git (format_t fmt) +setup_git (manifest_t manifest) { - if (!fmt.flag.git) + if (!manifest.flag.git) return 0; reset_path; - int err = system ("git init --quiet"); - if (err) - printfn ("failed on git initialize: %s", strerror (err)); + int status = system ("git init --quiet"); + if (status) + printfn ("failed on git initialize: %s", strerror (status)); - return err; + return status; } static int -create_makefile (format_t fmt) +create_makefile (manifest_t manifest) { - char *makefile_name = strdup (fmt.project); + char *makefile_name = strdup (manifest.project); if (!makefile_name) { printfn ("fatal: out of memory"); @@ -176,7 +213,7 @@ create_makefile (format_t fmt) create_file_with_content ("Makefile", makefile_template, makefile_name, makefile_name, makefile_name, makefile_name, - makefile_name, makefile_name, fmt.project, + makefile_name, makefile_name, manifest.project, makefile_name, makefile_name); free (makefile_name); @@ -184,38 +221,51 @@ create_makefile (format_t fmt) } static int -create_configure () +create_configure (manifest_t manifest) { + int status = 0; reset_path; - create_file_with_content ("configure", configure_template); - int err = system ("chmod +x configure"); - if (err) - printfn ("error: %s", strerror (err)); - return err; + char *cc; + if (manifest.flag.use_cpp) + { + cc = "trycc g++\ntrycc CC\ntrycc clang++\n"; + } + else + { + cc = "trycc gcc\ntrycc cc\ntrycc clang\n"; + } + + create_file_with_content ("configure", configure_template, cc); + status = system ("chmod +x configure"); + if (status) + printfn ("error: %s", strerror (status)); + return status; } static int -generate_source_code (format_t fmt) +generate_source_code (manifest_t manifest) { - int err; + int status; - debug ("take %s/%s", fmt.project, fmt.project); - err = create_and_enter_directory (fmt.project); - on_error ("failed to create or enter directory", err); + debug ("take %s/%s", manifest.project, manifest.project); + status = create_and_enter_directory (manifest.project); + on_error ("failed to create or enter directory", status); + ++depth; - if (fmt.flag.GNU) + if (manifest.flag.GNU) { debug ("GNU flag source branch"); - create_file_with_content ("main.c", main_c_gnu_template, fmt.project, - fmt.name); + create_file_with_content ("main.c", main_c_gnu_template, + manifest.project, manifest.name); goto atexit_clean; } debug ("default sourcebranch"); - create_file_with_content ("main.c", main_c_template, fmt.project, fmt.name); + create_file_with_content ("main.c", main_c_template, manifest.project, + manifest.name); atexit_clean: reset_path; @@ -223,14 +273,13 @@ atexit_clean: } static int -parse_arguments (format_t *conf, int argc, char **argv) +parse_arguments (manifest_t *conf, int argc, char **argv) { - static struct option long_options[] - = { { "GNU", no_argument, 0, 1 }, - { "use-cpp", no_argument, 0, 2 }, - { "git", no_argument, 0, 3 }, - { "license", required_argument, 0, 4 }, - { 0, 0, 0, 0 } }; + static struct option long_options[] = { + { "GNU", no_argument, 0, 1 }, { "use-cpp", no_argument, 0, 2 }, + { "git", no_argument, 0, 3 }, { "licence", required_argument, 0, 4 }, + { "lib", required_argument, 0, 5 }, { 0, 0, 0, 0 } + }; int opt; int long_index = 0; @@ -248,12 +297,16 @@ parse_arguments (format_t *conf, int argc, char **argv) case 3: conf->flag.git = 1; break; - case 4: // TODO: Licence + case 4: // TODO: implement the licence options, and make it lowercase. + break; + case 5: + ADD_LIBRARY (conf->libraries, TOlibrary (optarg)); // TODO: Get this working break; case '?': break; } } + int positional_count = 0; for (int i = optind; i < argc; ++i) { @@ -264,56 +317,58 @@ parse_arguments (format_t *conf, int argc, char **argv) } if (positional_count == 0) - { - conf->project = argv[i]; - } + conf->name = argv[i]; else if (positional_count == 1) - { - conf->name = argv[i]; - } + conf->project = argv[i]; ++positional_count; } + return 0; } static int -create_project (format_t fmt) +create_project (manifest_t manifest) { - int err; + int status; debugc ("sanitize"); - err = sanitize (&fmt); - on_error ("failed to sanitize format", err); + status = sanitize (&manifest); + on_error ("failed to sanitize format", status); done; - debugc ("take %s", fmt.project); - err = create_and_enter_directory (fmt.project); + debugc ("take %s", manifest.project); + status = create_and_enter_directory (manifest.project); depth = 0; - on_error ("failed to create or enter directory", err); + on_error ("failed to create or enter directory", status); 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); + status = create_makefile (manifest); + on_error ("failed to create Makefile", status); done; debug ("setup git"); - err = setup_git (fmt); - if (err) - printfn ("warning: git initialization failed: %s", strerror (err)); + status = setup_git (manifest); + if (status) + { + printfn ("warning: git initialization failed: %s", strerror (status)); + } debug ("create .clang-format"); - err = maybe_apply_clang_format (fmt); - if (err) - printfn ("warning: clang-format setup failed: %s", strerror (err)); + status = maybe_create_clang_format (manifest); + if (status) + { + printfn ("warning: clang-format setup failed: %s", strerror (status)); + } debugc ("generate source code"); - err = generate_source_code (fmt); - on_error ("failed to generate source code", err); + status = generate_source_code (manifest); + on_error ("failed to generate source code", status); + done; + + debugc ("get libraries"); + status = create_libraries (manifest); + on_error ("failed to get libraries", status); done; return 0; @@ -339,23 +394,18 @@ main (int argc, char **argv) return status; } - format_t conf = { 0 }; + manifest_t manifest = { 0 }; - // TODO: Argument Parsing - conf.project = "sample_project"; - conf.name = "vx_clutch"; + parse_arguments (&manifest, argc, argv); - if (!conf.name) + if (!manifest.name) // TODO: Move to sanitize { struct passwd *pw = getpwuid (getuid ()); - conf.name = (pw && pw->pw_name) ? pw->pw_name : DEFAULT_USER_NAME; + manifest.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; + status = create_project (manifest); - status = create_project (conf); if (!status) debug ("project made successfully"); else