Boost logo

Boost :

Subject: [boost] bpm, a tool to install a modular Boost distribution
From: Peter Dimov (lists_at_[hidden])
Date: 2015-01-05 10:29:06

One month ago, Stephen Kelly wrote:

> git affects the developer workflow, but that thread was about creating
> modular releases and downloads, which is a different goal and has a
> different set of problems to solve. That's what that thread was about. I
> didn't see any desire to have that as a goal in the thread.
> Git doesn't affect users.
> Before and after transition to git, they download from
> the boost website.

To address this point of his, I've been working at a tool, bpm, that can
install a modular Boost distribution.

As I've already mentioned in other threads, it works like this:

D:\boost-1.60.0>bpm install system
bpm: installing module 'system'
bpm: installing module 'assert'
bpm: installing module 'config'
bpm: installing module 'core'
bpm: installing module 'predef'
bpm: installing module 'build'
bpm: the following libraries need to be built:
bpm: (use ./b2 to build)
bpm: recreating header links
bpm: recreating index

That is, when told to install Boost.System, it downloads and installs the
'system' package into ./libs/system, along with all its dependencies, then
creates links to the headers (like 'b2 headers') in ./include and an
./index.html file listing the installed libraries.

The full syntax is:

Usage: bpm [-v] [-q] command [options] [modules]

  -v: Be verbose
  -vv: Be more verbose
  -q: Be quiet

  bpm install [-n] [+d] [-k] [-a] [-i] [-p] <module> <module>...

    Installs the specified modules and their dependencies into
    the current directory.

    -n: Only output what would be installed
    +d: Do not install dependencies
    -k: Do not remove partial installations on error
    -a: All modules (use instead of a module list)
    -i: Installed modules
    -p: Partially installed modules

  bpm remove [-n] [-f] [-d] [-a] [-p] <package> <package>...

    Removes the specified packages.

    (A package, like 'numeric', can contain more than one module.)

    -n: Only output what would be removed
    -f: Force removal even when dependents exist
    -d: Remove dependents as well. Requires -f
    -a: Remove all packages. Requires -f
    -p: Remove partially installed packages

  bpm list [-a] [-i] [-p] [-b] [prefix]

    Lists modules matching [prefix].

    -a: All modules (default when no -b)
    -i: Installed modules (default when -b)
    -p: Partially installed modules
    -b: Modules that require building

  bpm headers

    Recreates the header links in the include/ subdirectory of
    the current directory.

  bpm index

    Recreates the file index.html, which lists the installed
    modules, in the current directory.

This all works already under Windows. (I haven't finished the POSIX part yet 
but it should be close.)
I could have made a Windows binary available for people to play with, but 
I'd rather give sources (at first). bpm contains code to do rm -rf 
<directory>, and if I've made a mistake somewhere, it could cause damage.
So, if there is interest and there are no objections, I'd like to put this 
tool into the Boost repository, in tools/bpm.

Boost list run by bdawes at, gregod at, cpdaniel at, john at