# FAQ Or rather, stuff I would ask, if I hadn't written it myself :) ## Where is what ? * `.bootstrap` is the bootstrap configuration of the repository. * `.bootstrap.auto` is generated by mulle-bootstrap fetch, it contains information recursively collected from dependent repostiories, that have their own .bootstrap folder. * `.bootstrap.local` contains local settings you can use to override settings in .bootstrap and .bootstrap.auto. You create it manually. * `~/.mulle-bootstrap` contains some global customizations. This becomes autogenerated when using brew stuff. * `build/.repos` contains intermediate files generated by the build, which can be safely thrown away * `dependencies` contains the produced headers, libraries and frameworks * `/usr/local/libexec/mulle-bootstrap` contains scripts for mulle-bootstrap ## Where is what in .bootstrap ? * Files in `.bootstrap` itself are used for fetching dependencies and some configurations. * Files in `.bootstrap/config` are rarely used options, to change mulle-bootstrap behavior. * Files in `.bootstrap/settings` are used for building dependencies. Here you find compiler flags, targets, sdks et.c. * Folders in `.bootstrap/repos` are build settings for individual dependencies. Optimally this folder is empty or non-existant. ## Where is what in .bootstrap.auto ? * Files in `.bootstrap.auto` are an amalgamation of .bootstrap and the contents of .bootstrap of the dependencies. * .bootstrap/config should not exist * .bootstrap/settings should not exist * Folders in `.bootstrap.auto/repos` are the settings inherited from .bootstrap. ### How are multiple value settings separated ? Separation is done by newline, not by space. ```console mkdir -p ".bootstrap/settings" 2> /dev/null echo "Debug Release" > .bootstrap/settings/configurations # WRONG echo "Debug Release" > .bootstrap/settings/configurations # RIGHT ``` ### mulle-bootstrap does not do what I want ? Check out the SETTINGS.md file for help about tweaking mulle-bootstrap. As an example, here is how to specify what target to build. Put the target name into `.bootstrap/settings/{reponame}/targets` ```console mkdir -p ".bootstrap/settings/Finch" 2> /dev/null echo "Finch Demo" > .bootstrap/Finch/targets ``` ### Can I change the build folder from build/.repos to something else ? Better not. You can set it with "build_foldername". But beware: ><font color=red>mulle-bootstrap assumes that it can just **rm -rf** the folder, so choosing `~` or `/tmp` as a build folder is not a great idea.</font> ```console echo "you_have/been_warned" > ~/.bootstrap.local/build_foldername ``` ### What happens when I symlink a folder instead of cloning it ? It is assumed, that the repository link is "usable" as is. Specifically it won't be recursively bootstrapped. It also won't get any kind of .bootstrap inheritance. `mulle-bootstrap` will just **cd** there, give it the target dependency folder, ### I specified SKIP_INSTALL=YES in my Xcode project, but stuff gets installed nonetheless ? Because this SKIP_INSTALL=YES is the default unfortunately and lots of project maintainers forget to turn it off, **mulle-bootstrap** sets this flag to NO at compile time. If you know that SKIP_INSTALL is correctly set, set "proper_skip_install" to "YES". ```console mkdir -p ".bootstrap/settings/{reponame}" 2> /dev/null echo "YES" > .bootstrap/settings/{reponame}/proper_skip_install ``` ### How can I tweak some Xcode project settings ? Lots of ways, probably the quickest is: ```console mkdir -p .bootstrap/Foo 2> /dev/null echo "BrandedFoo" > .bootstrap/settings/Foo/PRODUCT_NAME ``` If you have lots of stuff, you may want to use your own **.xcconfig** file. This is likely to be more useful if placed into the .bootstrap folder directly. ```console mkdir -p ".bootstrap/settings" 2> /dev/null cp myconfig.xcconfig > .bootstrap/settings/xcconfig ``` ### Should I put build settings into .bootstrap/{reponame} or into .bootstrap ? It's better to specify build settings on a per repository basis. Repository settings can be inherited over recursive fetches. Build settings in `.bootstrap` do not. ### My Xcode project's headers do not show up ? Check that your Xcode project has a **Header Phase** and that the header files are in "public". ### I have a depencency on another library in the same project. The headers of the dependency library are in `dependencies/usr/local/include`. What now ? **mulle-bootstrap*+ can't manage xcodebuild dependencies, so you have to help it. Specify the targets you want to build. ### I build an aggregate target and the headers end up in the wrong place mulle_bootstrap has problems with aggregate targets. Built the subtargets individually by enumerating them in ".bootstrap/settings/{reponame}/targets" ```console mkdir -p ".bootstrap/settings/MulleScion" 2> /dev/null echo "MulleScion (iOS Library) MulleScion (iOS Framework)" > .bootstrap/settings/MulleScion/targets" ``` ### It's not working as I expect now what ? Try to use some of the debug facilities. Each of these environment variables need to be set to **YES** to work. Environment Variable | Description --------------------------------------+------------------------------------- MULLE_BOOTSTRAP_VERBOSE | turn on a little more output. If you set it to VERBOSE instead of YES, it produces quite a bit more output. Set it to FULL for exhausting detail. Set it to -x for shell tracing. MULLE_BOOTSTRAP_TRACE | traces shell commands as they are executed MULLE_BOOTSTRAP_TRACE_SETTINGS | traces resolved settings MULLE_BOOTSTRAP_TRACE_ACCESS_SETTINGS | traces each file access in search for a setting