yabs 0.2.2

Yet another build system
Documentation
# yabs
[![Build Status](https://travis-ci.org/0X1A/yabs.svg?branch=master)](https://travis-ci.org/0X1A/yabs)

Yet another build system. A C and C++ build system, with projects described
using TOML.

**Note**: Yabs is still very much a work in progress and is subject to change.
Until yabs reaches version `1.0.0`, it should be assumed that yabs will continue 
to change.

## Get Yabs
To install yabs simply run `cargo install yabs`. If you are installing from 
crates.io please see the version of documentation available on docs.rs that corresponds to
your output of `yabs --version`. Otherwise, clone this repo and build the release target and add
yabs to your `$PATH`

## Building
To build `yabs` you will need `rustc` and `cargo`. Simply run `cargo build
--release`, this will build a binary called `yabs` in `target/release`.

# Using
Output of `yabs -h`

```
yabs 0.2.0
Alberto Corona <ac@albertocorona.com>
Yet another build system

USAGE:
    yabs [FLAGS] [SUBCOMMAND]

FLAGS:
    -h, --help       Prints help information
        --sources    Print source files found by yabs or listed in 'src'
    -V, --version    Prints version information

SUBCOMMANDS:
    build    Build a binary or library, builds all binaries and libraries if no options are given
    clean    Removes all object files, binaries and libraries built by yabs
    help     Prints this message or the help of the given subcommand(s)
    new      Create a new yabs project
```

## Defining a Project
`yabs` uses TOML to define projects. For example, a project in C++ using libraries such as SDL2, SDL2-image, SDL2-ttf, and Lua 5.3 would look similar to the following:

```toml
[project]
name = "kuma"
file-extensions = ["cpp"]
compiler = "g++"
compiler-flags = ["std=c++14", "O0", "Wall", "Wextra", "g", "D_DEBUG_"]
include = ["src","`pkg-config --cflags sdl2 lua5.3`", "/usr/include/yaml-cpp", "third_party/sol2/single/sol"]
libraries = [
	"`pkg-config --libs sdl2 SDL2_image SDL2_ttf SDL2_mixer lua5.3 yaml-cpp`",
]
ignore = [
	"tests/",
	"third_party/",
]


[[bin]]
name = "kuma"
path = "./src/main.cpp"


[[lib]]
name = "libkuma"
types = ["static"]
```

### Building a Project
Currently `yabs` builds all targets listed in `[[bin]]` and `[[lib]]` sections

# Keys and Values
The following tables describes what keys are available to yabs project files.

### [project]
| Key    | Value                           | Type |
| ---    | -----                           | ---- |
| `name`   | Name for project                | String |
| `file-extensions`   | Extensions used for source files | Array |
| `version` | Version number | String |
| `compiler` | Compiler to use | String |
| `src` | Source files | Array |
| `libraries` | Libraries to link | Array |
| `librariy-directories` | Library directories to use | Array |
| `include` | Include directories | Array |
| `compiler-flags` | Compiler flags | Array |
| `linker-flags` | Linker flags | Array |
| `ignore` | Directories or files to ignore | Array |
| `before-script` | Scripts to run before a build | Array |
| `after-script` |  Scripts to run after a build | Array |
| `ar` | Archiving tool to use | String |
| `arflags` | Flags for archiving tool | Array |

### [[bin]]
| Key    | Value                           | Type |
| ---    | -----                           | ---- |
| `name` | Name and path for the binary | String |
| `path` | Path for the binary entry point (`main`) | String |

### [[lib]]
| Key    | Value                           | Type |
| ---    | -----                           | ---- |
| `name` | Name of library | String |
| `types` | Library types to create | Array |