From 600996c8322105ec83fad90351f89792524a6e98 Mon Sep 17 00:00:00 2001 From: vx-clutch Date: Wed, 5 Nov 2025 20:23:26 -0500 Subject: [PATCH] save --- src/flat.c | 6 +- t/flat_Makefile.x | 31 +++++ template.h | 308 ++++------------------------------------------ 3 files changed, 59 insertions(+), 286 deletions(-) create mode 100644 t/flat_Makefile.x diff --git a/src/flat.c b/src/flat.c index 762a7e4..04bb9d2 100644 --- a/src/flat.c +++ b/src/flat.c @@ -1,7 +1,7 @@ // SPDX-License-Identifer: BSD-3-Clause /* * A uemacs derided and inspired layout and format for smaller projects; - * such as, a small library, or CLI. + * such as, a small test, or CLI. */ #include #include @@ -14,7 +14,7 @@ int generate_flat(char *package, char *author, int year, char *license, { char *main; asprintf(&main, "%s.c", package); - fs_write("Makefile", "%s", package); + fs_write("Makefile", templ_FLAT_MAKEFILE, package); fs_write(main, "%s", license); fs_write("version.h", "\ #ifndef VERSION_H_\n\ @@ -36,7 +36,7 @@ void version();\n\ \n\ void version()\n\ {\n\ - printf(\"%s version %s\\n\", PROGRAM_NAME_LONG, VERSION);\n\ + printf(\"%%s version %%s\\n\", PROGRAM_NAME_LONG, VERSION);\n\ }"); return 0; } diff --git a/t/flat_Makefile.x b/t/flat_Makefile.x new file mode 100644 index 0000000..891791a --- /dev/null +++ b/t/flat_Makefile.x @@ -0,0 +1,31 @@ +Format_Index: p +PROGRAM = %s +CC = gcc +CFLAGS = -O2 -Wall -Wstrict-prototypes -g +DEFINES = +LIBS = + +SRC = $(wildcard *.c) +OBJ = $(SRC:.c=.o) + +V = +ifeq ($(strip $(V)),) +E = @echo +Q = @ +else +E = @\# +Q = +endif +export E Q + +$(PROGRAM): $(OBJ) + $(E) " LINK " $@ + $(Q) $(CC) $(CFLAGS) $(DEFINES) -o $@ $^ $(LIBS) + +%.o: %.c + $(E) " CC " $@ + $(Q) $(CC) $(CFLAGS) $(DEFINES) -c $< + +clean: + $(E) " CLEAN" + $(Q) rm -f $(PROGRAM) $(OBJ) diff --git a/template.h b/template.h index b29273a..4799e6d 100644 --- a/template.h +++ b/template.h @@ -1,254 +1,35 @@ /* DO NOT MODIFY THIS FILE! It was generated by t 1.0.1. */ -#ifndef FOO_BAR -#define FOO_BAR -/* - * year (d) - * author (s) - */ -static const char templ_INSTALL[] = "\ -Installation Instructions\n\ -*************************\n\ -Copyright (C) %d %s\n\ - Copying and distribution of this file, with or without modification,\n\ -are permitted in any medium without royalty provided the copyright\n\ -notice and this notice are preserved. This file is offered as-is,\n\ -without warranty of any kind.\n\ -Basic Installation\n\ -==================\n\ - Briefly, the shell command `./configure && make && make install` should\n\ -configure, build, and install this package. The following more-detailed\n\ -instruction are generic; see the `README` file for instructions specific to\n\ -this package.\n\ - The `configure` shell script attempts to guess correct values for\n\ -various system-dependent variables used during compilation. It uses\n\ -those values within a `Makefile` to build for that POSIX system as\n\ -defined by `config.mak` which was generated by `configure`.\n\ -Compilers and Options\n\ -=====================\n\ - Some systems require unusal options for compilation or linking that\n\ -the `configure` script does not know about. If you run into an issue\n\ -run `./configure --help` to figure out what you can do to fix the\n\ -behavoir.\n\ -Installation Names\n\ -==================\n\ - By default, `make install` installs the package's command under\n\ -`/usr/local/bin`. You can specify an installation prefix other than `/usr/local/`\n\ -by giving `configure` the option `--prefix=PREFIX` to `configure`, the package uses\n\ -PREFIX as the prefix for installation programs and libraries.\n\ -Documentation and other data files still use the regular prefix.\n\ -`configure` Invokation\n\ -======================\n\ - `configure` recongizes the following options to control its operations.\n\ - `--help`\n\ - Prints a summary of all the options to `configure`, and exits.\n\ - `--prefix=PREFIX`\n\ - Sets the installation prefix.\n\ - `CFLAGS`\n\ - Sets the flags used during compilation.\n\ -`configure` also accepts some other options. Run `configure --help` for more\n\ -details"; - -/* - * license (s) - * year (d) - * author (s) - * description (s) - * author (s) - */ -static const char templ_MAIN[] = "\ -// SPDX-License-Identifier: %s\n\ -/*\n\ - * Copyright (C) %d, %s.\n\ - * Written by YOU (you@example.com)\n\ - */\n\ - #include \n\ - static int exit_status;\n\ - static void print_help();\n\ - static void print_version();\n\ - int main(int argc, char **argv)\n\ - {\n\ - exit_status = EXIT_SUCCESS;\n\ - return exit_status;\n\ - }\n\ -static void print_help()\n\ -{\n\ - printf(\"Usage: %%s [OPTION]...\n\", PROGRAM);\n\ - fputs(\"\\\n\ -%s.\n\",\n\ - stdout);\n\ - puts(\"\");\n\ - fputs(\"\\\n\ - --help display this help and exit\n\\\n\ - --version display version information and exit\n\",\n\ - stdout);\n\ - /*\n\ - puts(\"\");\n\ - fputs(\"\\\n\ - --foo Enable the foo directive\n\",\n\ - stdout);\n\ - */\n\ - exit(exit_status);\n\ -}\n\ -static void print_version()\n\ -{\n\ - printf(\"%%s %%s %%d\n\", prog_name, VERSION, COMMIT);\n\ - printf(\"Copyright (C) %%d %s.\n\", YEAR);\n\ - puts(\"This is free software: you are free to change and redistribute it.\");\n\ - puts(\"There is NO WARRANTY, to the extent permitted by law.\");\n\ - exit(exit_status);\n\ -}"; - +#ifndef TEMPLATE_H +#define TEMPLATE_H /* * package (s) */ -static const char templ_MAKEFILE[] = "\ -# SPDX-License-Identifier: BSD-3-Clause\n\ -PACKAGE := %s\n\ -SRCS := $(wildcard src/*.c) $(wildcard lib/*.c)\n\ -OBJS := $(patsubst src/%.c,build/obj/%.o,$(SRCS))\n\ -BIN := bin/$(PACKAGE)\n\ -COMMIT := $(shell git rev-list --count --all)\n\ -FLAGS := -I. -DCOMMIT=$(COMMIT) --std=c2x -pedantic -Ibuild/include\n\ -VERSION := $(shell git describe --tags --always --dirty)\n\ -TARBALL := $(PACKAGE)-$(VERSION).tar.gz\n\ -RELEASE_FILES := doc src lib COPYING AUTHORS README $(PACKAGE).1 INSTALL Makefile configure config.h\n\ --include config.mak\n\ -ifeq ($(wildcard config.mak),)\n\ -all:\n\ - @echo \"File config.mak not found, run configure\"\n\ - @exit 1\n\ +static const char templ_FLAT_MAKEFILE[] = "\ +PROGRAM = %s\n\ +CC = gcc\n\ +CFLAGS = -O2 -Wall -Wstrict-prototypes -g\n\ +DEFINES =\n\ +LIBS =\n\ +SRC = $(wildcard *.c)\n\ +OBJ = $(SRC:.c=.o)\n\ +V =\n\ +ifeq ($(strip $(V)),)\n\ +E = @echo\n\ +Q = @\n\ else\n\ -all: build $(BIN) doc\n\ -build:\n\ - mkdir -p bin\n\ - mkdir -p build/obj\n\ -build/obj/%.o: src/%.c config.mak\n\ - $(CC) $(FLAGS) $(CFLAGS) -c $< -o $@\n\ -$(BIN): $(OBJS) \n\ - $(CC) $(FLAGS) $(CFLAGS) $^ -o $@\n\ +E = @\\#\n\ +Q =\n\ endif\n\ -install: $(BIN)\n\ - cp $(BIN) $(PREFIX)\n\ -doc:\n\ - $(MAKE) -C doc all\n\ -uninstall:\n\ - $(RM) $(PREFIX)$(PACKAGE)\n\ +export E Q\n\ +$(PROGRAM): $(OBJ)\n\ + $(E) \" LINK \" $@\n\ + $(Q) $(CC) $(CFLAGS) $(DEFINES) -o $@ $^ $(LIBS)\n\ +%.o: %.c\n\ + $(E) \" CC \" $@\n\ + $(Q) $(CC) $(CFLAGS) $(DEFINES) -c $<\n\ clean:\n\ - $(RM) -r bin\n\ - $(RM) -r build\n\ - $(MAKE) -C doc clean\n\ -distclean: clean\n\ - $(RM) config.mak config.status\n\ - $(RM) $(TARBALL)\n\ - $(MAKE) -C doc clean\n\ -release: clean all\n\ - tar -czf $(TARBALL) $(RELEASE_FILES)\n\ -test:\n\ - @$(BIN) --version > /dev/null 2>&1 && echo \"intact\"|| echo \"defective\"\n\ -.PHONY: all clean distclean install uninstall build release doc"; - -/* - * year (d) - * author (s) - */ -static const char templ_README_DEV[] = "\ -This README.dev file describes the development environment.\n\ - Copyright (C) %d %s.\n\ - Copying and distribution of this file, with or without modification,\n\ - are permitted in any medium without royalty provided the copyright\n\ - notice and this notice are preserved.\n\ -Notice\n\ -------\n\ -This documentation is standard across all GCK package and is not specified per\n\ -package; however, this is the defacto standard for most packages. The only\n\ -place where this commonly differs is in non-binary or library packages.\n\ -Build system\n\ -------------\n\ -This distribution uses a GNU autotools-like build system. This is made up of a\n\ -configure script, and a Makefile. The configure script detects a C23 compiler\n\ -on the system and sets any program flags: debug, release, custom. The Makefile\n\ -builds the binary based on the output [config.mak] of the configure script.\n\ -Building\n\ ---------\n\ -To build this distribution you first must run the configure script. This\n\ -outputs a config.mak file that will be used in the Make step. Then run make;\n\ -this builds the objects into build/ and the binary into bin/.\n\ -Configuration\n\ --------------\n\ -The configuration script is used to generate a build intermediate step called\n\ -the config.mak. This file is used by the Makefile to figure out C compiler to\n\ -use, what CFLAGS and LDFLAGS to use, and where to install the binary if\n\ -requested. By default these values are gcc, the release flag set, and\n\ -/usr/local/. The configuration script supports the following flags that control\n\ -CFLAGS: --enable-debug and CFLAGS=\"\". By default, the script uses flags for a release\n\ -build. Debug is for in-development programming and is the strictest when it\n\ -comes to warnings and other compiler output. CFLAGS=\"\" is for custom flag\n\ -definition. For the development environment is it recommended to use the\n\ ---debug flag. Some examples of how you can run the configure script:\n\ -For default behavior:\n\ - ./configure\n\ -For debug use:\n\ - ./configure --enable-debug\n\ -For help text:\n\ - ./configure --help\n\ -The help text is a more useage specific and up-to-date reference for\n\ -the configure script.\n\ -Makefile\n\ ---------\n\ -The GNU Makefile is used to build the final executable, clean up build\n\ -artifacts, and install the program. It checks for the config.mak which is\n\ -generated by the configure script. For a regular build, once you have the\n\ -configure script with desired flags, run:\n\ - make\n\ -This builds the executable to bin/ and build objects to build/\n\ -Suggested enviroment setup\n\ ---------------------------\n\ -It is suggested that you run do the following things to prepare you environment\n\ -for development. This is not a strict enforcement, but due to the project\n\ -structure it is a good starting point.\n\ - git pull\n\ - ./tools/Cleanup\n\ - ./configure --enable-debug\n\ - ./build-aux/generate-artifacts\n\ - make test\n\ -This is to ensure that you have the most up-to-date source code, and that there\n\ -are no major problems with the source control version.\n\ -The git pull is used to sync with the repository and prevent conflicts. The\n\ -cleanup is to ensure their are no lingering build artifacts. The configure with\n\ -debug enabled is for strict build flags and -ggdb. Bear is used to generated\n\ -compile_commands.json for the clang suite of tooling. Finally, run the program\n\ -to ensure the chain works.\n\ -Pre-commit checks\n\ ------------------\n\ -Before you commit to source control ensure that done the following:\n\ - * Run the cleanup scripts\n\ - ./tools/Cleanup\n\ - * Ensure that all changes were atomic\n\ - * If you compted a TODO list item check it off.\n\ - * Based on complexity, test the feature accordingly."; - -/* - */ -static const char templ_README_RELEASE[] = "\ -Here are most of the steps before you make a release.\n\ -* Start from a clean, up-to-date git driectory on \"master\":\n\ - make -k distclean || { ./configure && make distclean; }\n\ - git checkout master\n\ - git pull origin master\n\ -* Ensure that the latest stable versions of make, sh, etc.\n\ -are in your path. See the prerequisites list in README-dev\n\ -for a compile list of tools.\n\ -* Ensure that you have no uncommitted diffs. This should produce\n\ -no output:\n\ - git diff\n\ -* Ensure that you've pushed all changes that belong in the release:\n\ - git push origin master\n\ -* Pre-release testing: ensure that the following command succeeds:\n\ - make check syntax-check distcheck\n\ -Once all the builds and tests have passed,\n\ -* Run the following to create release tarballs.\n\ - make release\n\ -* Upload the tarball to the relavent distribtuion platform."; + $(E) \" CLEAN\"\n\ + $(Q) rm -f $(PROGRAM) $(OBJ)"; /* * author (s) @@ -284,43 +65,4 @@ contribute, this should get you started. If you're not a programmer,\n\ your help in writing test cases, checking documentation against the\n\ implementation, etc., would still be very much appreciated.\n\ %s %s is free software. See the file COPYING for copying conditions."; - -/* - * license (s) - * description (s) - * year (d) - * author (s) - * description (s) - * package (s) - */ -static const char templ_SHELL[] = "\ -#!/bin/sh\n\ -# SPDX-License-Identifier: %s\n\ -#\n\ -# %s\n\ -me=$0\n\ -scriptversion=\"1.0.0\"\n\ -version=\"$me $scriptversion\n\ -Copyright (C) %d %s\n\ -This is free software; you are free to change and redistribute it.\n\ -There is NO WARRANTY, to the textent permitted by law.\"\n\ -usage=\"\\\n\ -Usage: $me [OPTION]...\n\ -%s\n\ -Options:\n\ - --help print this help and exit\n\ - --version output version information\"\n\ -while [ $# -gt 0 ]; do\n\ - case $1 in\n\ - --help) echo \"$usage\"; exit 0;;\n\ - --version) echo \"$version\"; exit 0;;\n\ - -*)\n\ - echo \"$0: Unknown option '$1'.\" >&2\n\ - echo \"$0: Try '--help' for more information.\" >&2\n\ - exit 1 ;;\n\ - esac\n\ - shift\n\ -done\n\ -echo \"$0: done.\"\n\ -# End: %s"; #endif