commit 600996c8322105ec83fad90351f89792524a6e98
parent a977f0afbe40c61b0ea4c468d73fb587a1caee9e
Author: vx-clutch <[email protected]>
Date: Wed, 5 Nov 2025 20:23:26 -0500
save
Diffstat:
3 files changed, 59 insertions(+), 286 deletions(-)
diff --git 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 <lib/fs.h>
#include <lib/say.h>
@@ -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
@@ -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
@@ -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 ([email protected])\n\
- */\n\
- #include <stdlib.h>\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