save
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
// SPDX-License-Identifer: BSD-3-Clause
|
// SPDX-License-Identifer: BSD-3-Clause
|
||||||
/*
|
/*
|
||||||
* A uemacs derided and inspired layout and format for smaller projects;
|
* 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/fs.h>
|
||||||
#include <lib/say.h>
|
#include <lib/say.h>
|
||||||
@@ -14,7 +14,7 @@ int generate_flat(char *package, char *author, int year, char *license,
|
|||||||
{
|
{
|
||||||
char *main;
|
char *main;
|
||||||
asprintf(&main, "%s.c", package);
|
asprintf(&main, "%s.c", package);
|
||||||
fs_write("Makefile", "%s", package);
|
fs_write("Makefile", templ_FLAT_MAKEFILE, package);
|
||||||
fs_write(main, "%s", license);
|
fs_write(main, "%s", license);
|
||||||
fs_write("version.h", "\
|
fs_write("version.h", "\
|
||||||
#ifndef VERSION_H_\n\
|
#ifndef VERSION_H_\n\
|
||||||
@@ -36,7 +36,7 @@ void version();\n\
|
|||||||
\n\
|
\n\
|
||||||
void version()\n\
|
void version()\n\
|
||||||
{\n\
|
{\n\
|
||||||
printf(\"%s version %s\\n\", PROGRAM_NAME_LONG, VERSION);\n\
|
printf(\"%%s version %%s\\n\", PROGRAM_NAME_LONG, VERSION);\n\
|
||||||
}");
|
}");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
31
t/flat_Makefile.x
Normal file
31
t/flat_Makefile.x
Normal file
@@ -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)
|
||||||
308
template.h
308
template.h
@@ -1,254 +1,35 @@
|
|||||||
/* DO NOT MODIFY THIS FILE! It was generated by t 1.0.1. */
|
/* DO NOT MODIFY THIS FILE! It was generated by t 1.0.1. */
|
||||||
#ifndef FOO_BAR
|
#ifndef TEMPLATE_H
|
||||||
#define FOO_BAR
|
#define TEMPLATE_H
|
||||||
/*
|
|
||||||
* 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 <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\
|
|
||||||
}";
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* package (s)
|
* package (s)
|
||||||
*/
|
*/
|
||||||
static const char templ_MAKEFILE[] = "\
|
static const char templ_FLAT_MAKEFILE[] = "\
|
||||||
# SPDX-License-Identifier: BSD-3-Clause\n\
|
PROGRAM = %s\n\
|
||||||
PACKAGE := %s\n\
|
CC = gcc\n\
|
||||||
SRCS := $(wildcard src/*.c) $(wildcard lib/*.c)\n\
|
CFLAGS = -O2 -Wall -Wstrict-prototypes -g\n\
|
||||||
OBJS := $(patsubst src/%.c,build/obj/%.o,$(SRCS))\n\
|
DEFINES =\n\
|
||||||
BIN := bin/$(PACKAGE)\n\
|
LIBS =\n\
|
||||||
COMMIT := $(shell git rev-list --count --all)\n\
|
SRC = $(wildcard *.c)\n\
|
||||||
FLAGS := -I. -DCOMMIT=$(COMMIT) --std=c2x -pedantic -Ibuild/include\n\
|
OBJ = $(SRC:.c=.o)\n\
|
||||||
VERSION := $(shell git describe --tags --always --dirty)\n\
|
V =\n\
|
||||||
TARBALL := $(PACKAGE)-$(VERSION).tar.gz\n\
|
ifeq ($(strip $(V)),)\n\
|
||||||
RELEASE_FILES := doc src lib COPYING AUTHORS README $(PACKAGE).1 INSTALL Makefile configure config.h\n\
|
E = @echo\n\
|
||||||
-include config.mak\n\
|
Q = @\n\
|
||||||
ifeq ($(wildcard config.mak),)\n\
|
|
||||||
all:\n\
|
|
||||||
@echo \"File config.mak not found, run configure\"\n\
|
|
||||||
@exit 1\n\
|
|
||||||
else\n\
|
else\n\
|
||||||
all: build $(BIN) doc\n\
|
E = @\\#\n\
|
||||||
build:\n\
|
Q =\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\
|
|
||||||
endif\n\
|
endif\n\
|
||||||
install: $(BIN)\n\
|
export E Q\n\
|
||||||
cp $(BIN) $(PREFIX)\n\
|
$(PROGRAM): $(OBJ)\n\
|
||||||
doc:\n\
|
$(E) \" LINK \" $@\n\
|
||||||
$(MAKE) -C doc all\n\
|
$(Q) $(CC) $(CFLAGS) $(DEFINES) -o $@ $^ $(LIBS)\n\
|
||||||
uninstall:\n\
|
%.o: %.c\n\
|
||||||
$(RM) $(PREFIX)$(PACKAGE)\n\
|
$(E) \" CC \" $@\n\
|
||||||
|
$(Q) $(CC) $(CFLAGS) $(DEFINES) -c $<\n\
|
||||||
clean:\n\
|
clean:\n\
|
||||||
$(RM) -r bin\n\
|
$(E) \" CLEAN\"\n\
|
||||||
$(RM) -r build\n\
|
$(Q) rm -f $(PROGRAM) $(OBJ)";
|
||||||
$(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.";
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* author (s)
|
* 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\
|
your help in writing test cases, checking documentation against the\n\
|
||||||
implementation, etc., would still be very much appreciated.\n\
|
implementation, etc., would still be very much appreciated.\n\
|
||||||
%s %s is free software. See the file COPYING for copying conditions.";
|
%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
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user