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