Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/edlund/amalgamate
Amalgamate C source and header files.
https://github.com/edlund/amalgamate
Last synced: 13 days ago
JSON representation
Amalgamate C source and header files.
- Host: GitHub
- URL: https://github.com/edlund/amalgamate
- Owner: edlund
- License: other
- Created: 2012-02-17T08:36:21.000Z (over 12 years ago)
- Default Branch: master
- Last Pushed: 2015-08-18T17:19:49.000Z (about 9 years ago)
- Last Synced: 2024-08-01T19:58:52.776Z (3 months ago)
- Language: Python
- Homepage:
- Size: 114 KB
- Stars: 85
- Watchers: 4
- Forks: 11
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# amalgamate.py - Amalgamate C source and header files
Origin: https://bitbucket.org/erikedlund/amalgamate
Mirror: https://github.com/edlund/amalgamate
`amalgamate.py` aims to make it easy to use SQLite-style C source and header
amalgamation in projects.For more information, please refer to: http://sqlite.org/amalgamation.html
## Here be dragons
`amalgamate.py` is quite dumb, it only knows the bare minimum about C code
required in order to be able to handle trivial include directives. It can
produce weird results for unexpected code.Things to be aware of:
`amalgamate.py` will not handle complex include directives correctly:
#define HEADER_PATH "path/to/header.h"
#include HEADER_PATHIn the above example, `path/to/header.h` will not be included in the
amalgamation (HEADER_PATH is never expanded).`amalgamate.py` makes the assumption that each source and header file which
is not empty will end in a new-line character, which is not immediately
preceded by a backslash character (see 5.1.1.2p1.2 of ISO C99).`amalgamate.py` should be usable with C++ code, but raw string literals from
C++11 will definitely cause problems:R"delimiter(Terrible raw \ data " #include )delimiter"
R"delimiter(Terrible raw \ data " escaping)delimiter"In the examples above, `amalgamate.py` will stop parsing the raw string literal
when it encounters the first quotation mark, which will produce unexpected
results.## Installing amalgamate.py
Python v.2.7.0 or higher is required.
`amalgamate.py` can be tested and installed using the following commands:
./test.sh && sudo -k cp ./amalgamate.py /usr/local/bin/
## Using amalgamate.py
amalgamate.py [-v] -c path/to/config.json -s path/to/source/dir \
[-p path/to/prologue.(c|h)]* The `-c, --config` option should specify the path to a JSON config file which
lists the source files, include paths and where to write the resulting
amalgamation. Have a look at `test/source.c.json` and `test/include.h.json`
to see two examples.* The `-s, --source` option should specify the path to the source directory.
This is useful for supporting separate source and build directories.* The `-p, --prologue` option should specify the path to a file which will be
added to the beginning of the amalgamation. It is optional.