From 9e94f5ce44b60d6922ac7424abaaec8b89ae1dd0 Mon Sep 17 00:00:00 2001 From: vx-clutch Date: Wed, 23 Jul 2025 13:40:29 -0400 Subject: [PATCH] save --- c-out/bin/yait | Bin 0 -> 41112 bytes c-out/obj/main.o | Bin 14544 -> 27136 bytes config.mak | 4 +- tools/Cleanup | 23 --- tools/check_header | 44 ++++++ tools/check_header_footer | 71 --------- yait/main.c | 315 +++++++++++++++++++++++++------------- 7 files changed, 255 insertions(+), 202 deletions(-) create mode 100755 c-out/bin/yait create mode 100755 tools/check_header delete mode 100755 tools/check_header_footer diff --git a/c-out/bin/yait b/c-out/bin/yait new file mode 100755 index 0000000000000000000000000000000000000000..d987686f3d1264ad612d307e933e79d8f1ffcf9d GIT binary patch literal 41112 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 literal 0 HcmV?d00001 diff --git a/c-out/obj/main.o b/c-out/obj/main.o index 76b785d7d0a6b4cb4a3d972947e3fbd15edfa432..30f10558e46bb9164417dab9af65a7d8f40ae85d 100644 GIT binary patch literal 27136 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 PB~mT|l_Ou#l>h$$_;XnF literal 14544 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 diff --git a/config.mak b/config.mak index d6ba4f4..4f95eb0 100644 --- a/config.mak +++ b/config.mak @@ -1,4 +1,4 @@ PREFIX=/usr/bin/ -CFLAGS=-Wall -Wextra -O2 +CFLAGS=-Wall -Wextra -g LDFLAGS= -CC=gcc +CC=clang diff --git a/tools/Cleanup b/tools/Cleanup index 3831995..9008928 100755 --- a/tools/Cleanup +++ b/tools/Cleanup @@ -4,32 +4,9 @@ make dist-clean -lint_file() { - local output - output=$(clang-tidy "$1" 2>&1 | grep -v -E 'Error while trying to load a compilation database|No compilation database found|fixed-compilation-database:|json-compilation-database:|Running without flags.') - if [[ -n "$output" ]]; then - echo "[LINT] $1:" - echo "$output" - fi -} - -whitespace_cleanup() { - sed -i 's/[ \t]*$//' "$1" - awk 'BEGIN{ORS=""} {print $0 "\n"} END{}' "$1" > "$1.tmp" && mv "$1.tmp" "$1" -} - -comment_check() { - if grep -n -E 'TODO|FIXME' "$1"; then - echo "[WARN] $1 contains TODO/FIXME comments." - fi -} - process_file() { clang-format -i "$1" tools/check_header_footer "$1" - lint_file "$1" - whitespace_cleanup "$1" - comment_check "$1" } if [[ $# -gt 0 ]]; then diff --git a/tools/check_header b/tools/check_header new file mode 100755 index 0000000..a0cc5d2 --- /dev/null +++ b/tools/check_header @@ -0,0 +1,44 @@ +#!/bin/env bash + +# Usage: ./check_header + +if pwd | grep -q tools; then + cd .. +fi + +files=$(find yait \( -name '*.c' -o -name '*.h' \)) +files+=" " +files+=$(find core \( -name '*.c' -o -name '*.h' \)) +files+=" $(find . -maxdepth 1 -type f)" + +ignore="README COPYING .clang-format config.mak" + +if [ -z "$files" ]; then + echo "No files found" + exit 0 +fi + +missing="" + +for file in $files; do + if echo "$ignore" | grep -qw "$(basename "$file")"; then + continue + fi + echo -ne "$file... " + if grep -q "Copyright (C)" "$file"; then + echo -e "\033[1;32mOK\033[0m" + else + echo -e "\033[0;31mFAIL\033[0m" + missing+="$file " + fi +done + +if [ "$missing" = "" ]; then + echo -e "\033[1;32mAll checks pass.\033[0m" +else + echo -e "\033[0;31mThe follwing files are missing copyright information.\033[0m" +fi + +for file in $missing; do + echo " - $file" +done diff --git a/tools/check_header_footer b/tools/check_header_footer deleted file mode 100755 index 3eb2be7..0000000 --- a/tools/check_header_footer +++ /dev/null @@ -1,71 +0,0 @@ -#!/bin/bash - -# Usage: ./ensure_header_footer.sh filename - -FILE="$1" -HEADER=$(cat <<'EOF' -// Copyright (C) 2025 vx_clutch ( owestness@gmail.com ) -// See end of file for extended copyright information. -EOF -) -HEADER+=$'\n' -FOOTER=$(cat <<'EOF' - -/* yait is yet another init tool. - * Copyright (C) 2025 vx-clutch - * - * This file is part of yait. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions, and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions, and the following disclaimer in the documentation or - * other materials provided with the distribution. - * 3. Neither the name of vx-clutch nor the names of its contributors may be - * used to endorse or promote products derived from this software without - * specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -EOF -) - -if [[ -z "$FILE" ]]; then - echo "Usage: $0 " - exit 1 -fi - -if [[ ! -f "$FILE" ]]; then - echo "Error: File '$FILE' does not exist." - exit 1 -fi - -TMP_FILE="$(mktemp)" - -read -r FIRST_LINE < "$FILE" -if [[ "$FIRST_LINE" != "$HEADER" ]]; then - echo "$HEADER" > "$TMP_FILE" - cat "$FILE" >> "$TMP_FILE" - mv "$TMP_FILE" "$FILE" -else - rm "$TMP_FILE" -fi - -if [[ "$(tail -n 1 "$FILE")" != "$FOOTER" ]]; then - echo "$FOOTER" >> "$FILE" -fi - -echo "Checked '$FILE' for header/footer." diff --git a/yait/main.c b/yait/main.c index 41e8236..499f7c5 100644 --- a/yait/main.c +++ b/yait/main.c @@ -1,9 +1,12 @@ +// Usage: yait [OPTION]... [PROJECT] (NAME) + #include "../config.h" #include "../core/file.h" #include "../core/print.h" #include "../core/standard.h" #include "contents.h" #include "format.h" +#include #include #include #include @@ -12,184 +15,284 @@ #define DEBUG -#define DEFAULT_USER_NAME "unknown" -#define DEFAULT_PROJECT_NAME "Project" -#define DEFAULT_LICENSE BSD3 -#define DEFAULT_GIT_INIT true -#define DEFAULT_CLANG_FORMAT true +#define DEFAULT_USER_NAME "unknown" +#define DEFAULT_PROJECT_NAME "Project" +#define DEFAULT_LICENSE BSD3 +#define DEFAULT_GIT_INIT true +#define DEFAULT_CLANG_FORMAT true -#define print_option(option, description) \ - printf(" %-20s %-20s\n", option, description) +#define print_option(option, description) \ + printf (" %-20s %-20s\n", option, description) +#define on_error(msg, code) \ + if (err) \ + { \ + printfn (msg ": %s", strerror (err)); \ + return code; \ + } -int create_license_if_needed(format_t); -int create_makefile(format_t); -int create_project(format_t); -int get_license_line_and_create_license(format_t, char**); -int maybe_apply_clang_format(format_t); -int sanitize(format_t *); -int setup_git_and_permissions(format_t); +#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_if_needed (format_t); +// int get_license_line_and_create_license (format_t, char **); +int create_configure (); +int create_makefile (format_t); +int create_project (format_t); +int generate_source_files (format_t); +int maybe_apply_clang_format (format_t); +int reset_path_ (); +int sanitize (format_t *); +int setup_git (format_t); + +int depth; void -usage(int status) +usage (int status) { if (status != 0) { - fprintf(stderr, "Try 'yait --help' for more information.\n"); + fprintf (stderr, "Try 'yait --help' for more information.\n"); return; } - 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: gpl]"); - 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"); + 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]"); + 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"); } int -main(int argc, char **argv) +main (int argc, char **argv) { if (argc < 2) { - printfn("error: not enough arguments."); + printfn ("error: not enough arguments."); return 1; } - int status = initialize_main(&argc, &argv); - status = parse_standard_options(usage, argc, argv); + int status = initialize_main (&argc, &argv); + status = parse_standard_options (usage, argc, argv); if (status && status != HELP_REQUESTED) { - printfn("error: %s", strerror(status)); + printfn ("error: %s", strerror (status)); return status; } - format_t conf; - conf.project = argv[0]; - conf.name = (argc > 2) ? argv[1] : NULL; + format_t conf = { 0 }; + + conf.project = argv[0]; // fix: project name is argv[1] + conf.name = (argc > 1) ? argv[1] : NULL; // fix: name is optional, at argv[2] if (!conf.name) { - struct passwd *pw = getpwuid(getuid()); + 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.licence = DEFAULT_LICENSE; - #ifdef DEBUG - system(strcat("rm -rf ", conf.project)); - #endif - return create_project(conf); + + return create_project (conf); } int -create_project(format_t fmt) +create_project (format_t fmt) { int err; - err = create_and_enter_directory(fmt.project); - if (err) - { - printfn("failed to create or enter directory: %s", strerror(err)); - return err; - } + debugc ("sanitize... "); + err = sanitize (&fmt); + on_error ("failed to sanitize format", err); + done; - err = sanitize(&fmt); - if (err) - { - printfn("failed to sanitize format: %s", strerror(err)); - return err; - } + debugc ("take %s", fmt.project); + err = create_and_enter_directory (fmt.project); + on_error ("failed to create or enter directory", err); + done; + depth = 0; - err = create_license_if_needed(fmt); - if (err) - { - printfn("failed to create license: %s", strerror(err)); - return err; - } + // debug ("create licenseing"); + // err = create_license_if_needed (fmt); + // on_error ("failed to create license", err); - err = create_makefile(fmt); - if (err) - { - printfn("failed to create Makefile: %s", strerror(err)); - return err; - } + debugc ("create makefile"); + err = create_makefile (fmt); + on_error ("failed to create Makefile", err); + done; - err = setup_git_and_permissions(fmt); + debug ("setup git"); + err = setup_git (fmt); if (err) - { - printfn("warning: git initialization failed: %s", strerror(err)); - // continue even if git fails - } + printfn ("warning: git initialization failed: %s", strerror (err)); - err = maybe_apply_clang_format(fmt); + debug ("create .clang-format"); + err = maybe_apply_clang_format (fmt); if (err) - { - printfn("warning: clang-format setup failed: %s", strerror(err)); - } + printfn ("warning: clang-format setup failed: %s", strerror (err)); return 0; } +#define reset_path reset_path_ () int -sanitize(format_t *fmt) +reset_path_ () +{ + while (depth != 0) + { + if (chdir ("..") != 0) + return errno; + else + depth--; + } + return 0; +} + +int +sanitize (format_t *fmt) { if (!fmt->name) fmt->name = DEFAULT_USER_NAME; - return 0; } -int -create_license_if_needed(format_t fmt) -{ - char *license_line = NULL; - return get_license_line_and_create_license(fmt, &license_line); -} +// int +// create_license_if_needed (format_t fmt) +// { +// char *license_line = NULL; +// return get_license_line_and_create_license (fmt, &license_line); +// } +// +// int +// get_license_line_and_create_license (format_t fmt, char +// **license_line_buffer) +// { +// switch (fmt.licence) +// { +// case BSD3: +// *license_line_buffer = "License BSD-3-Clause: BSD-3-Clause " +// ""; +// return create_file_with_content ("COPYING", bsd3_license_template, +// YEAR, +// fmt.name); +// +// case GPLv3: +// default: +// *license_line_buffer = "License GPLv3: GNU GPL version 3 " +// ""; +// return create_file_with_content ("COPYING", gplv3_license_template, +// YEAR, +// fmt.name); +// } +// } int -get_license_line_and_create_license(format_t fmt, char **license_line_buffer) -{ - switch (fmt.licence) - { - case BSD3: - *license_line_buffer = - "License BSD-3-Clause: BSD-3-Clause "; - return create_file_with_content("COPYING", bsd3_license_template, YEAR, fmt.name); - - case GPLv3: - default: - *license_line_buffer = "License GPLv3: GNU GPL version 3 "; - return create_file_with_content("COPYING", gplv3_license_template, YEAR, fmt.name); - } -} - -int -maybe_apply_clang_format(format_t fmt) +maybe_apply_clang_format (format_t fmt) { if (!fmt.flag.clang_format) return 0; - const char *clang_fmt = "BasedOnStyle: LLVM\nIndentWidth: 2\nUseTab: Never\n"; - return create_file_with_content(".clang-format", clang_fmt, 0, NULL); + reset_path; + + char *clang_fmt = "BasedOnStyle: LLVM\nIndentWidth: 2\nUseTab: Never\n"; + return create_file_with_content (".clang-format", clang_fmt, 0, NULL); } int -setup_git_and_permissions(format_t fmt) +setup_git (format_t fmt) { if (!fmt.flag.git) return 0; - int err = system("git init --quiet"); + reset_path; + + int err = system ("git init --quiet"); if (err) - { - printfn("failed on git initialize: %s", strerror(err)); - } + printfn ("failed on git initialize: %s", strerror (err)); + return err; } + +int +create_makefile (format_t fmt) +{ + char *makefile_name = strdup (fmt.project); + if (!makefile_name) + { + printfn ("fatal: out of memory"); + return 1; + } + + for (char *p = makefile_name; *p; ++p) + if (*p >= 'a' && *p <= 'z') + *p -= 32; + + reset_path; + + create_file_with_content ("Makefile", makefile_template, makefile_name, + makefile_name, makefile_name, makefile_name, + makefile_name, makefile_name, fmt.project, + makefile_name); + + free (makefile_name); + return 0; +} + +int +create_configure () +{ + reset_path; + + create_file_with_content ("configure", configure_template); + int err = system ("chmod +x configure"); + if (err) + printfn ("error: %s", strerror (err)); + return err; +} + +int +generate_source_files (format_t fmt) +{ + int err; + + debug ("take %s/%s", fmt.project, fmt.project); + err = create_and_enter_directory (fmt.project); + on_error ("failed to create or enter directory", err); + + if (fmt.flag.GNU) + { + debug ("GNU flag source branch"); + + create_file_with_content ("main.c", main_c_gnu_template); + + goto atexit_clean; + } + + debug ("default sourcebranch"); + create_file_with_content ("main.c", main_c_template); + +atexit_clean: + reset_path; + return 0; +}