name mode size
..
mulle-bootstrap-build-plugins 040000
mulle-bootstrap-scm-plugins 040000
mulle-bootstrap-array.sh 100755 7 kb
mulle-bootstrap-auto-update.sh 100755 15 kb
mulle-bootstrap-brew.sh 100644 13 kb
mulle-bootstrap-build.sh 100755 32 kb
mulle-bootstrap-clean.sh 100755 15 kb
mulle-bootstrap-command.sh 100644 6 kb
mulle-bootstrap-common-settings.sh 100644 7 kb
mulle-bootstrap-copy.sh 100644 6 kb
mulle-bootstrap-core-options.sh 100644 5 kb
mulle-bootstrap-defer.sh 100644 7 kb
mulle-bootstrap-dependency-resolve.sh 100644 5 kb
mulle-bootstrap-dispense.sh 100644 10 kb
mulle-bootstrap-fetch.sh 100755 43 kb
mulle-bootstrap-functions.sh 100755 27 kb
mulle-bootstrap-gcc.sh 100755 3 kb
mulle-bootstrap-git.sh 100644 7 kb
mulle-bootstrap-init.sh 100755 7 kb
mulle-bootstrap-local-environment.sh 100755 22 kb
mulle-bootstrap-logging.sh 100644 6 kb
mulle-bootstrap-mingw.sh 100644 4 kb
mulle-bootstrap-mv-force.sh 100755 2 kb
mulle-bootstrap-paths.sh 100644 21 kb
mulle-bootstrap-project.sh 100644 7 kb
mulle-bootstrap-repositories.sh 100644 29 kb
mulle-bootstrap-scm.sh 100644 12 kb
mulle-bootstrap-scripts.sh 100755 3 kb
mulle-bootstrap-settings.sh 100755 32 kb
mulle-bootstrap-show.sh 100644 11 kb
mulle-bootstrap-snip.sh 100644 3 kb
mulle-bootstrap-status.sh 100644 6 kb
mulle-bootstrap-systeminstall.sh 100644 8 kb
mulle-bootstrap-tag.sh 100755 7 kb
mulle-bootstrap-warn-scripts.sh 100755 5 kb
mulle-bootstrap-xcode.sh 100755 13 kb
mulle-bootstrap-zombify.sh 100755 6 kb
test-array-and-resolver.sh 100755 2 kb
test-compute-relative.sh 100755 2 kb
test-expanded-variables.sh 100755 1 kb
test-link-command.sh 100755 1 kb
test-parse-clone.sh 100755 2 kb
test-perfect-relative-path.sh 100755 5 kb
test-reposdir.sh 100755 3 kb
test-simplify-path.sh 100755 3 kb
README.md
# mulle-bootstrap, cross platform dependency manager using bash ![Last version](https://img.shields.io/github/tag/mulle-nat/mulle-bootstrap.svg) ... for Linux, OS X, FreeBSD, Windows ... for C, C++, Objective-C ... certainly not a "minimal" or "lightweight" project with ca. 10000 lines of shell script code ## 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 * 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 ## A first use 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`: ``` mkdir .bootstrap echo "# a comment https://github.com/madler/zlib.git https://github.com/coapp-packages/expat.git" > .bootstrap/repositories mulle-bootstrap ``` **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/lib` and `dependencies/include` folders. ## Tell me more * [How to install](dox/INSTALL.md) * [How to use](dox/COMMANDS.md) * [What has changed ?](RELEASENOTES.md) * [Tweak guide](dox/SETTINGS.md) * [CMakeLists.txt.example](dox/CMakeLists.txt.example) shows how to access dependencies from **cmake** * [FAQ](dox/FAQ.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) 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. ## 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).