Nat! bio photo


Senior Mull.

Twitter RSS


mulle-bootstrap: cross-platform dependency management tool

For me 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

mulle-bootstrap, cross platform dependency manager for Linux, OS X, FreeBSD

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 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

Post a comment

All comments are held for moderation; basic HTML formatting accepted.

E-mail: (not published)