README.md
751a6002
 # mulle-bootstrap, cross platform dependency manager using bash
7be3796e
 
1442adc4
 ![Last version](https://img.shields.io/github/tag/mulle-nat/mulle-bootstrap.svg)
 
7be3796e
 ... for Linux, OS X, FreeBSD, Windows
ed336411
 
ed3c61c1
 ... for C, C++, Objective-C
 
e3bb0c25
 ... certainly not a "minimal" or "lightweight" project with ca. 10000 lines of
ed3c61c1
   shell script code
 
1442adc4
 
ed3c61c1
 ## Why you may want it
 
 * You program in C, C++ or in Objective-C, **mulle-bootstrap** is written for you
 * If you need to link against a library, that clashes with an installed
 library,  **mulle-bootstrap** could break this quandary
 * If you feel that `apt-get install` pollutes your system with too many libraries,  **mulle-bootstrap** may be the solution
 * If you don't like developing in virtual machines, **mulle-bootstrap** may
 tickle your fancy
 * If you like to decompose huge projects into reusable libraries,
 **mulle-bootstrap** may enable you to do so
 * If you do cross-platform development, **mulle-bootstrap** may be your best bet for a dependency manager
 
 
 ## Core principles
 
 * Nothing gets installed outside of the project folder
 * **mulle-bootstrap** manages your dependencies, it does not manage your
 project
 * It should be adaptable to a wide ranges of project styles. Almost anything
 can be done with configuration settings or additional shell scripts.
 * It should be scrutable. If things go wrong, it should be easy to figure
 out what the problem is. It has extensive logging and tracing support built in.
 * It should run everywhere. **mulle-bootstrap** is a collection of
 shell scripts. If your system can run the bash, it can run **mulle-bootstrap**.
 
 
 ## What it does technically
 
987c5691
 * 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/).
cbf01546
 * builds [cmake](//blog.cppcms.com/post/54),
7a4ae0c8
 [xcodebuild](//devcodehack.com/xcode-sucks-and-heres-why/) and
 [configure](//quetzalcoatal.blogspot.de/2011/06/why-autoconf-sucks.html)
7be3796e
 projects and installs their output into a "dependencies" folder.
ed336411
 * installs [brew](//dzone.com/articles/why-osx-sucks-and-you-should) binaries and
7be3796e
 libraries into an "addictions" folder (on participating platforms)
5e30f645
 * alerts to the presence of shell scripts in fetched dependencies
987c5691
 
ed3c61c1
 ## A first use
5de2fbd6
 
987c5691
 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
ed3c61c1
 URLs in a file called `./bootstrap/repositories`:
add86e0c
 
 ```
ed3c61c1
 mkdir .bootstrap
 echo "# a comment
add86e0c
 https://github.com/madler/zlib.git
ed3c61c1
 https://github.com/coapp-packages/expat.git" > .bootstrap/repositories
 mulle-bootstrap
5de2fbd6
 ```
 
c72b5ccf
 **mulle-bootstrap** will check them out into a common directory `.repos`.
5de2fbd6
 
5e30f645
 After cloning **mulle-bootstrap** looks for a `.bootstrap` folder in the freshly
 checked out repositories. They might have dependencies too, if they do, those
c72b5ccf
 dependencies are added and also fetched.
5de2fbd6
 
c72b5ccf
 Everything should now be in place so **mulle-bootstrap** that can now build the
987c5691
 dependencies with **cmake**. It will place the headers and the produced
ed3c61c1
 libraries into the `dependencies/lib`  and `dependencies/include` folders.
5de2fbd6
 
 
ed3c61c1
 ## Tell me more
5de2fbd6
 
4c18ff63
 * [How to install](dox/INSTALL.md)
48ac764a
 * [How to use](dox/COMMANDS.md)
ed3c61c1
 * [What has changed ?](RELEASENOTES.md)
4c18ff63
 * [Tweak guide](dox/SETTINGS.md)
 * [FAQ](dox/FAQ.md)
5de2fbd6
 
ed3c61c1
 * [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)
5de2fbd6
 
751a6002
 If you want to hack on mulle-bootstrap, I'd recommend to get
 [Sublime Text](//www.sublimetext.com) and [install the linter plugin](//blog.codybunch.com/2016/01/25/Better-Bash-with-Sublime-Linter-and-ShellCheck/) to use [Shellcheck](//www.shellcheck.net). It
 simplifies shell scripting by an order of magnitude.
75913c0b
 
 ## GitHub and Mulle kybernetiK
 
 The development is done on [Mulle kybernetiK](https://www.mulle-kybernetik.com/software/git/mulle-bootstrap/master). Releases and bug-tracking are on [GitHub](https://github.com/mulle-nat/mulle-bootstrap).