# mulle-bootstrap, cross platform dependency manager using bash and cmake
... for Linux, OS X, FreeBSD, Windows
Everything `mulle-bootstrap` installs is relative to your project root, creating
a virtual environment. Downloaded packages and binaries don't "pollute" your
system. Toss vagrant :)
* fetches [git](//enux.pl/article/en/2014-01-21/why-git-sucks) repositories.
In times of need, it can also checkout [svn](//andreasjacobsen.com/2008/10/26/subversion-sucks-get-over-it/).
* builds [cmake](//blog.cppcms.com/post/54),
[xcodebuild](//devcodehack.com/xcode-sucks-and-heres-why/) and
[configure](//quetzalcoatal.blogspot.de/2011/06/why-autoconf-sucks.html)
projects and installs their output into a "dependencies" folder.
* installs [brew](//dzone.com/articles/why-osx-sucks-and-you-should) binaries and
libraries into an "addictions" folder (on participating platforms)
* alerts to the presence of shell scripts in fetched dependencies
* runs on **OS X**, **FreeBSD**, **Linux**, **Windows** with
MINGW bash
* certainly not a "minimal" or lightweight" project with ca. 10000 lines of
shell script code
## Tell me more
* [How to install](INSTALL.md)
* [What has changed ?](RELEASENOTES.md)
* [mulle-bootstrap: A dependency management tool](https://www.mulle-kybernetik.com/weblog/2015/mulle_bootstrap_work_in_progr.html)
* [mulle-bootstrap: Understanding mulle-bootstrap (I)](https://www.mulle-kybernetik.com/weblog/2016/mulle_bootstrap_how_it_works.html)
* [mulle-bootstrap: Understanding mulle-bootstrap (II), Recursion](https://www.mulle-kybernetik.com/weblog/2016/mulle_bootstrap_recursion.html)
## What mulle-bootstrap can do for you
So you need a bunch of third party projects to build your own
project ? No problem. Use **mulle-bootstrap init** to do the initial setup of
a `.bootstrap` folder in your project directory. Then put the git repository
URLs in a file called
`./bootstrap/repositories`:
```
https://github.com/madler/zlib.git
https://github.com/coapp-packages/expat.git
```
**mulle-bootstrap** will check them out into a common directory `.repos`.
After cloning **mulle-bootstrap** looks for a `.bootstrap` folder in the freshly
checked out repositories. They might have dependencies too, if they do, those
dependencies are added and also fetched.
Everything should now be in place so **mulle-bootstrap** that can now build the
dependencies with **cmake**. It will place the headers and the produced
libraries into the `dependencies` folder.
That's it in a nutshell. But it can do a lot more.
## Commands for a project user
#### mulle-bootstrap
Download a project which is mulle-bootstrap enabled. Execute mulle-bootstrap
in it and you are all set:
```console
mulle-bootstrap
```
`mulle-bootstrap` is a the shortened command of `mulle-bootstrap bootstrap`, which
in turn executes:
#### mulle-bootstrap fetch
Downloads all required libraries into a `.repos` folder.
#### mulle-bootstrap build
Compiles the required libraries contained in the `.repos` folder into
`./dependencies`. It compiles each project once for Release and once for Debug
(and given a file `.bootstrap/sdks` multiplied by the number of sdks needed)
## Commands for a project maintainer
#### mulle-bootstrap init
This is the first action. It sets up a `.bootstrap` folder in your project
directory root (e.g. alongside .git). At this point you should edit
`.bootstrap/repositories` to add git projects dependencies.
For each repository add a line like
`./bootstrap/repositories`:
```console
git@github.com:mulle-nat/MulleScion.git
```
In the file `.bootstrap/brews` you can specify homebrew projects that need to
be installed. These will be installed into `addictions`.
`./bootstrap/brews`:
```console
zlib
openssl
```
#### mulle-bootstrap tag
Tag all fetched repositories.