|
|
668af6 |
sofort: portable software project template
|
|
|
668af6 |
------------------------------------------
|
|
|
668af6 |
|
|
|
e17a99 |
motivation
|
|
|
e17a99 |
----------
|
|
|
e17a99 |
* take care of the elements that are common to all
|
|
|
e17a99 |
(of my) cross-platform C projects, and which, for
|
|
|
e17a99 |
the most part, do not (or at least should not)
|
|
|
e17a99 |
contain any project-specific bits:
|
|
|
e17a99 |
--> the build system;
|
|
|
e17a99 |
--> the argv parser and usage screen generator;
|
|
|
e17a99 |
--> the initial program driver;
|
|
|
e17a99 |
--> and initial front-end utility.
|
|
|
e17a99 |
* zero external dependencies: the new project is
|
|
|
e17a99 |
generated from the template project using basic
|
|
|
e17a99 |
shell utilities, specifically cp, grep, and sed.
|
|
|
e17a99 |
|
|
|
668af6 |
build system
|
|
|
668af6 |
------------
|
|
|
668af6 |
* the project is conceived as a library with
|
|
|
668af6 |
an accompanying front-end utility.
|
|
|
668af6 |
* the configure script is fast and skinny,
|
|
|
668af6 |
yet comprehensive.
|
|
|
668af6 |
* unified logic for native and cross builds.
|
|
|
668af6 |
* unified logic for in-tree and out-of-tree builds.
|
|
|
668af6 |
|
|
|
668af6 |
driver
|
|
|
668af6 |
------
|
|
|
668af6 |
* the provided argv parser and usage screen generator
|
|
|
668af6 |
is powerful, flexible, and thread-safe; moreover,
|
|
|
668af6 |
it allows for a program driver that is entirely
|
|
|
668af6 |
independent of the chosen skin.
|
|
|
668af6 |
|
|
|
668af6 |
skins
|
|
|
668af6 |
-----
|
|
|
668af6 |
* one benefit of the above design is that it allows the
|
|
|
668af6 |
front-end utility to have several distinct skins at
|
|
|
668af6 |
virtually no effort.
|
|
|
668af6 |
|
|
|
668af6 |
modularity
|
|
|
668af6 |
----------
|
|
|
668af6 |
* the distinct driver and unit context, in combination
|
|
|
668af6 |
with the thread-safe argv parser, render the front-end
|
|
|
668af6 |
utility's inclusion in a multi-call binary trivial.
|
|
|
668af6 |
|
|
|
668af6 |
extras
|
|
|
668af6 |
------
|
|
|
668af6 |
* the template provides the skeleton of an application
|
|
|
668af6 |
that may accept one or more files for its input, then
|
|
|
668af6 |
operate on each input file individually.
|