mulle-bootstrap: cross-platform dependency management tool
CocoaPods is too platform specific and I never really warmed to git submodules. git submodules are kind of a weird hack with surprising semantics (to me).
What I really want is a list of git repository URLs, that I want to download or link to. These should be compiled in various configurations and in a uniform way. I don't want to install to
/usr/include most of the time, but keep it project specific. I also want to use it on Linux and Windows and FreeBSD.
I figured I could handle this with a simple shell script quite easily. Well not true. One week later I had a collection of shell scripts, that became unwieldy. So I unified it all together into one wrapper mulle-bootstrap.
Where does it fit in ?
- Are you using a third party library, like readline that you need installed on development systems, but you don't touch it ? Add the name "readline" to .bootstrap/brews
- Are you always including a set of Xcode configurations ? Put the directory path into .bootstrap/embedded_repositories.
- Do you just need a snippet from another project and compile it with your code ? Put that project's relative path into .bootstrap/embedded_repositories.
- Are you using a set of open source libraries, which you wish to tag alongside your releases ? Add those github URLs into .bootstrap/repositories.
mulle-bootstrap is not a good setup, when you are working on dependencies that are very unstable, i.e. progressing daily, since excuting
mulle-bootstrap build too often, is tedious. An Xcode workspace will work better in this case. As soon as progress stops, move it to mulle-bootstrap and enjoy a much faster Xcode.
Terminal Movies of mulle-bootstrap (a bit outdated)
Why watch porn, if you can watch some terminal action right in your browser ? Have a look at it, here is 3 minutes of uncensored terminal movie action, featuring mulle-bootstrap. You may want to speed up the slow download part in the middle. My internet connection sucks.
This little tutorial shows how mulle-bootstrap can reuse the .bootstrap information of dependents. This terminal movie is a bit longer but it shows more of the general usage of the management tool.
Available via homebrew
If you like what you see, give it a try:
brew untap mulle-kybernetik/software # might be needed brew tap mulle-kybernetik/software brew install mulle-bootstrap
Available via git
The development homepage is mulle-bootstrap. It might show up on github some time.
git clone /repositories/mulle-bootstrap
And to finish it off, here's the intro from the README.md.
mulle-bootstrap, cross platform dependency manager for Linux, OS X, FreeBSD
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 repositories. In times of need, it can also checkout svn.
- builds cmake, xcodebuild and configure projects and installs there output into a "dependencies" folder.
- installs brew binaries and libraries into an "addictions" folder
- runs on OS X, FreeBSD (without brew), Linux, Windows with MINGW bash (without brew)
- certainly not a "lightweight" project with ca. 10000 lines of shell script code