# Build instructions

## Build dependencies

Ripasso depends on a number of local libraries through it's dependencies:

 * openssl - for git operations and sequoia crypto backend
 * libgit2 - for git operations
 * libgpgerror - for the gpgme encryption backend
 * gpgme - for the gpgme encryption backend
 * xorg - for the clippboard

They are named different things on different platforms

### Mac OS X

```
$ brew update
$ brew install automake cmake gettext gtk+4 gpgme
$ git clone https://github.com/cortex/ripasso.git
$ cd ripasso
$ cargo run
```

### Ubuntu
```
$ apt install cargo libssl-dev libclang-dev libadwaita-1-dev libgpgme11-dev libgpg-error-dev libgtk-4-dev libxcb-shape0-dev libxcb-xfixes0-dev
$ cargo build --all
```

### Fedora
#### All
```
$ dnf install cargo gpgme-devel openssl-devel libxcb libxcb-devel
```
#### GTK
```
$ dnf install rust-gdk-devel
```
## Building

Perform the build with:
```
cargo build --all --frozen --release
```
The argument `--frozen` ensures that the content of the `Cargo.lock` file is respected so that the build is repeatable,
this is mostly of interest for package maintainers in distributions.

### Build artifacts

The build produces a number of artifacts:
 * `./target/release/ripasso-cursive` - the main application binary, with the curses TUI
 * `./target/release/ripasso-gtk` - the GTK application, still in an experimental phase
 * `./target/man-page/cursive/ripasso-cursive.1` - The manual page for ripasso-cursive
 * `./target/translations/cursive/de.mo` - german translation
 * `./target/translations/cursive/fr.mo` - french translation
 * `./target/translations/cursive/it.mo` - italian translation
 * `./target/translations/cursive/nb.mo` - norwegian bokmål translation
 * `./target/translations/cursive/nn.mo` - norwegian nynorsk translation
 * `./target/translations/cursive/sv.mo` - swedish translation

The translation files are in gettext binary format, and should be installed in
`/usr/share/locale/{}/LC_MESSAGES/ripasso-cursive.mo` where `{}` should be replaced
with the locale. If that location doesn't conform to your distribution's guidelines,
then you can supply the environmental variable `TRANSLATION_INPUT_PATH` when building
to specify another.
