Building a program boils down to compiling binaries from source code using a compiler. However, an large number of “build systems” has been invented for the purpose of invoking a compiler and managing the data. Such build systems are necessarily bound to tradeoffs between simplicity and fancyness driven by both taste and policies. Good tradeoffs do not seem to exist yet. The high number of different implementations displays the lack of agreement on best practice, and every build system is rejected by more than accept it.
Currently, Gnucap includes a simplistic, modular, make based build system. However, the data used is provided separately and stored in a simple format. Virtually any build system can process this data, and is hence supported. For some, there is a more or less complete implementation.
Foreign build system files are not part of the main repo to reduce friction, improve flexibility and avoid lock-in. To try these examples, first clone the main repo.
$ git clone git://git.savannah.gnu.org/gnucap.git/ $ cd gnucap $ git checkout develop # as of 17.02.20
$ git clone git://git.savannah.gnu.org/gnucap/gnucap-tools.git --branch autotools autotools $ ./autotools/bootstrap $ mkdir build $ cd build $ ../configure.gnu --help $ less ../autotools/README and $ ../configure.gnu [..] $ make $ main/gnucap [..] gnucap>
Here's a tarball generated by autotools. It should work with just a POSIX shell and some Make. gnucap-20240205-auto.tar.gz
TODO: this never worked properly, need a cmake expert.
$ git clone git://git.savannah.gnu.org/gnucap/gnucap-tools.git --branch cmake cmake $ mkdir build $ cd build $ less ../cmake/README and $ cmake ../cmake [..] $ make $ GNUCAP_PLUGPATH=apps main/gnucap [..] gnucap>