- Please make pull requests against
next
, notmaster
. Ledger follows a git-flow branching model, in which development happens on thenext
branch and is subsequently merged intomaster
for releases. - If you're making changes to
ledger-mode
, or other files for which the Travis build is not relevant, please add[ci skip]
to the end of the commit message.
Developing the Ledger software uses a number different tools, not all of which will be familiar to all developers.
Boost: a standard set of C++ libraries. Most Boost libraries consist of inline functions and templates in header files.
Boost.Python: C++ library which enables seamless interoperability between C++ and the Python programming language.
Cheetah: a Python templating engine, used by ./python/server.py
.
CMake: A cross platform system for building from source code. It uses
the CMakeLists.txt
files.
Doxygen: generates programming documentation from
source code files. Primarily used on C++ sources, but works on all. Uses
the doc/Doxyfile.in
file.
GCC: Gnu Compiler Collection, which includes the gcc compiler and gcov coverage/profiler tool.
clang: C language family frontend for LLVM, which includes the clang compiler.
GMP: Gnu Multiple Precision Arithmetic Library provides arbitrary precision math.
MPFR: Gnu Multiple Precision Floating-point Library with correct rounding.
Markdown: A typesetter format that produces html files from .md files. Note that GitHub automatically renders .md files.
SHA1: a marginally secure cryptographic hash function, used only for signing the license file.
Texinfo: Gnu documentation
typesetter that produces html and pdf files from the doc/\*.texi
files.
Travis CI: a hosted continuous integration service that builds and runs tests each commit posted to GitHub. Each build creates a log, updates a small badge at the top left of the main project's README.md, and emails the author of the commit if any tests fail.
utfcpp: a library for handling utf-8 in a variety of C++ versions.
The source tree can be confusing to a new developer. Here is a selective orientation:
./acprep: a custom thousand-line script to install dependencies, grab
updates, and build. It also creates \*.cmake
,
./CmakeFiles/
and other CMake temporary files. Use ./acprep --help
for more information.
./README.md: user readme file in markdown format, also used as the project description on GitHub.
./contrib/: contributed scripts of random quality and completion. They usually require editing to run.
./doc/: documentation, licenses, and tools for generating documents such as the pdf manual.
./lib/: a couple of libraries used in development.
./lisp/: the Emacs ledger-mode lisp code, under the GPLv2 license.
./python/: samples using the Python ledger module.
./src/: the C++ header and source files in a flat directory.
./test/: a testing harness with subdirectories full of tests
./tools/: an accretion of tools, mostly small scripts, to aid development