summaryrefslogtreecommitdiff
path: root/README
blob: adc486a92a14769b629d6f26cfc9e43d767b24fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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.