| 6 | | |
| 7 | | |
| 8 | | = Getting Started with Modular Boost = |
| 9 | | [[PageOutline]] |
| 10 | | |
| 11 | | == Prerequisites == |
| 12 | | |
| 13 | | * A C++ compiler installed. |
| 14 | | * A recent release of the Git command line client installed. See [wiki:Git/GitHome Getting Started with Git] for Git version requirements and information about command line clients. |
| 15 | | |
| 16 | | If you haven't done so already, set up your git configuration: |
| 17 | | |
| 18 | | {{{ |
| 19 | | git config --global user.name "My Name" |
| 20 | | git config --global user.email my-email@whatever.domain |
| 21 | | }}} |
| 22 | | |
| 23 | | A Git GUI client such as [http://code.google.com/p/tortoisegit/ TortoiseGIT] may be useful for routine work, but is not required. |
| 24 | | |
| 25 | | == Choose a protocol for cloning == |
| 26 | | |
| 27 | | The [https://github.com/boostorg/boost Boost super-project and libraries on GitHub] support cloning via HTTPS or SSH protocols. SSH is often used by developers, but HTTPS may be required by some corporate firewalls and for read-only access. To use HTTPS instead of SSH, replace {{{git@github.com:boostorg/boost.git}}} in the examples below with {{{https://github.com/boostorg/boost.git}}}. |
| 28 | | |
| 29 | | === Authentication === |
| 30 | | |
| 31 | | The Boost super-project and libraries have been set up using relative URLs, so whichever protocol you use in the {{{git clone}}} command will determine how subsequent access to the super-project and libraries is authenticated. |
| 32 | | |
| 33 | | == Line endings == |
| 34 | | |
| 35 | | The Boost super-project and libraries ensure correct handling of line endings regardless of platform by supplying a {{{.gitattributes}}} file. However, you may also want to set {{{git config}}} options for managing line endings: |
| 36 | | |
| 37 | | On OS X, Linux, and other POSIX-like systems: |
| 38 | | |
| 39 | | {{{ |
| 40 | | git config --global core.autocrlf input |
| 41 | | }}} |
| 42 | | |
| 43 | | On Windows: |
| 44 | | |
| 45 | | {{{ |
| 46 | | git config --global core.autocrlf true |
| 47 | | }}} |
| 48 | | |
| 49 | | That sets the {{{core.autocrlf}}} option globally, so only needs to be done once. For more on line endings, see [https://help.github.com/articles/dealing-with-line-endings GitHub Dealing with line endings]. |
| 50 | | |
| 51 | | == Installing Modular Boost == |
| 52 | | |
| 53 | | The initial cloning will take at least 45 minutes on a 3.0 mbps Internet connection and will consume roughly 1.5 GB of disk space. Cloning is only done once, so this lengthy initial time is not a long-term concern. |
| 54 | | |
| 55 | | From the command line on Windows: |
| 56 | | |
| 57 | | {{{ |
| 58 | | git clone --recursive git@github.com:boostorg/boost.git modular-boost >clone.log |
| 59 | | cd modular-boost |
| 60 | | git checkout develop ||: # or whatever branch you want to use |
| 61 | | .\bootstrap |
| 62 | | .\b2 headers |
| 63 | | }}} |
| 64 | | |
| 65 | | On POSIX-like operating systems, with a one-time download: |
| 66 | | |
| 67 | | {{{ |
| 68 | | git clone --recursive git@github.com:boostorg/boost.git modular-boost >clone.log |
| 69 | | cd modular-boost |
| 70 | | git checkout develop ||: # or whatever branch you want to use |
| 71 | | ./bootstrap.sh |
| 72 | | ./b2 headers |
| 73 | | }}} |
| 74 | | |
| 75 | | On POSIX-like operating systems, with piecemeal downloads: |
| 76 | | |
| 77 | | {{{ |
| 78 | | git clone git@github.com:boostorg/boost.git modular-boost >clone.log # Check out only the super-project |
| 79 | | cd modular-boost |
| 80 | | git submodule update --init # Check out all the modules |
| 81 | | cd libs/accumalators |
| 82 | | }}} |
| 83 | | |
| 84 | | The {{{b2 headers}}} step creates the {{{boost}}} sub-directory hierarchy and populates it with links to the headers in the include sub-directories of the individual projects. |
| 85 | | |
| 86 | | == Experimenting == |
| 87 | | |
| 88 | | If you want to build the separately compiled Boost libraries, run the usual {{{b2}}} command. For Windows: |
| 89 | | |
| 90 | | {{{ |
| 91 | | .\b2 |
| 92 | | }}} |
| 93 | | |
| 94 | | For POSIX-like systems: |
| 95 | | |
| 96 | | {{{ |
| 97 | | ./b2 |
| 98 | | }}} |
| 99 | | |
| 100 | | If {{{b2}}} isn't already in your path, you might want to add it now. |
| 101 | | |
| 102 | | Testing is done just the way it has always been done. For example, |
| 103 | | |
| 104 | | {{{ |
| 105 | | cd libs/system/test |
| 106 | | b2 |
| 107 | | }}} |
| 108 | | |
| 109 | | should run the tests for Boost.system, all of which should pass. |
| 110 | | |
| 111 | | == Submodules == |
| 112 | | |
| 113 | | You might want to review the [http://git-scm.com/docs/git-submodule git submodule command] at this point, since understanding how to work with submodules is critical to working with the modular Boost repositories. |
| 114 | | |
| 115 | | == Developing == |
| 116 | | |
| 117 | | === Checking out a particular branch === |
| 118 | | |
| 119 | | The {{{clone}}} operation above leaves each individual library in the {{{modular-boost}}} local repository in a detached state that is not very useful if you want to make changes and also could result in data loss. So the first thing you want to do for a library you are going to modify is switch it to the branch you want to work on. For example, if you want to do some maintenance on the {{{develop}}} branch of {{{mylib}}}, do this: |
| 120 | | |
| 121 | | {{{ |
| 122 | | cd modular-boost/libs/mylib |
| 123 | | git checkout develop |
| 124 | | git branch -vv |
| 125 | | git pull |
| 126 | | }}} |
| 127 | | |
| 128 | | {{{git branch -vv}}} is just to reassure yourself you are tracking the remote repo. If not, you have some problem, such as a very old version git. |
| 129 | | |
| 130 | | {{{git pull}}} ensures the checkout is up to date. |
| 131 | | |
| 132 | | You are now ready to start regular maintenance! See [https://svn.boost.org/trac/boost/wiki/StartModMaint Getting Started with Modular Boost Library Maintenance]. |
| 133 | | |