Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r83218 - sandbox/contract
From: lorcaminiti_at_[hidden]
Date: 2013-02-28 18:24:24


Author: lcaminiti
Date: 2013-02-28 18:24:21 EST (Thu, 28 Feb 2013)
New Revision: 83218
URL: http://svn.boost.org/trac/boost/changeset/83218

Log:
Restored all files to root dir / as from Boost trunk/.
Added:
   sandbox/contract/INSTALL (contents, props changed)
   sandbox/contract/boost-build.jam (contents, props changed)
   sandbox/contract/boost.css (contents, props changed)
   sandbox/contract/boost.png (contents, props changed)
   sandbox/contract/boostcpp.jam (contents, props changed)
   sandbox/contract/boostcpp.py (contents, props changed)
   sandbox/contract/bootstrap.bat (contents, props changed)
   sandbox/contract/bootstrap.sh (contents, props changed)
   sandbox/contract/index.htm (contents, props changed)
   sandbox/contract/rst.css (contents, props changed)
Removed:
   sandbox/contract/Jamroot
   sandbox/contract/README.txt
   sandbox/contract/index.html
   sandbox/contract/logo.png
   sandbox/contract/screenshot1.png
   sandbox/contract/screenshot2.png
   sandbox/contract/screenshot3.png

Added: sandbox/contract/INSTALL
==============================================================================
--- (empty file)
+++ sandbox/contract/INSTALL 2013-02-28 18:24:21 EST (Thu, 28 Feb 2013)
@@ -0,0 +1,8 @@
+See ./index.html for information about this release. The "Getting Started"
+section is a useful starting place.
+
+---------------------------
+Copyright Beman Dawes, 2008
+
+Distributed under the Boost Software License, Version 1.0.
+See ./LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt
\ No newline at end of file

Deleted: sandbox/contract/Jamroot
==============================================================================
--- sandbox/contract/Jamroot 2013-02-28 18:24:21 EST (Thu, 28 Feb 2013)
+++ (empty file)
@@ -1,26 +0,0 @@
-
-# Copyright (C) 2008-2012 Lorenzo Caminiti
-# Use, modification, and distribution is subject to the
-# Boost Software License, Version 1.0 (see accompanying file
-# LICENSE_1_0.txt or a copy at http://www.boost.org/LICENSE_1_0.txt).
-# Documentation at http://contractpp.sourceforge.net.
-
-import os ;
-
-if ! [ os.environ BOOST_ROOT ]
-{
- exit "Error: Set BOOST_ROOT environment variable to the Boost root directory" ;
-}
-local BOOST_ROOT = [ os.environ BOOST_ROOT ] ;
-echo "Using Boost libraries from:" $(BOOST_ROOT) ;
-
-use-project boost : $(BOOST_ROOT) ;
-
-project
- : requirements
- # Add this library headers to include path.
- <include>"./include"
- # Add Boost library headers to include path.
- <include>$(BOOST_ROOT)
- ;
-

Deleted: sandbox/contract/README.txt
==============================================================================
--- sandbox/contract/README.txt 2013-02-28 18:24:21 EST (Thu, 28 Feb 2013)
+++ (empty file)
@@ -1,29 +0,0 @@
-
-Contract++
-
-Contract Programming Library for C++
-
-DESCRIPTION
-
-C++ Contract Programming (a.k.a. Design by Contract or DbC).
-All Eiffel features supported: subcontracting, postcondition old and result
-values, optional contract compilation, customizable action on assertion
-failure, block invariants, loop variants, etc.
-Plus virtual specifiers, concept checking, named parameters.
-See: http://contractpp.sourceforge.net
-
-FEATURES
-
-* Support for preconditions, postconditions, class invariants, block
- invariants, and loop variants.
-* Subcontract derived classes (with support for pure virtual functions and
- multiple inheritance).
-* Access expression old values and function return value in postconditions.
-* Optional compilation and checking of preconditions, postconditions, class
- invariants, block invariants, and loop variants.
-* Customizable actions on contract assertion failure (terminate by default but
- it can throw, exit, etc).
-* Virtual specifiers.
-* Concept checking.
-* Named parameters.
-

Added: sandbox/contract/boost-build.jam
==============================================================================
--- (empty file)
+++ sandbox/contract/boost-build.jam 2013-02-28 18:24:21 EST (Thu, 28 Feb 2013)
@@ -0,0 +1,17 @@
+# Copyright (C) 2002-2003 David Abrahams.
+# Copyright (C) 2002-2003 Vladimir Prus.
+# Copyright (C) 2003,2007 Rene Rivera.
+# Use, modification and distribution are subject to the
+# Boost Software License, Version 1.0. (See accompanying file
+# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+# This is the initial file loaded by Boost Jam when run from any Boost library
+# folder. It allows us to choose which Boost Build installation to use for
+# building Boost libraries. Unless explicitly selected using a command-line
+# option, the version included with the Boost library distribution is used (as
+# opposed to any other Boost Build version installed on the user's sytem).
+
+BOOST_ROOT = $(.boost-build-file:D) ;
+BOOST_BUILD = [ MATCH --boost-build=(.*) : $(ARGV) ] ;
+BOOST_BUILD ?= tools/build/v2 ;
+boost-build $(BOOST_BUILD) ;

Added: sandbox/contract/boost.css
==============================================================================
--- (empty file)
+++ sandbox/contract/boost.css 2013-02-28 18:24:21 EST (Thu, 28 Feb 2013)
@@ -0,0 +1,66 @@
+/*=============================================================================
+ Copyright 2002 William E. Kempf
+ Distributed under the Boost Software License, Version 1.0. (See accompany-
+ ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+H1
+{
+ FONT-SIZE: 200%;
+ COLOR: #00008B;
+}
+H2
+{
+ FONT-SIZE: 150%;
+}
+H3
+{
+ FONT-SIZE: 125%;
+}
+H4
+{
+ FONT-SIZE: 108%;
+}
+BODY
+{
+ FONT-SIZE: 100%;
+ BACKGROUND-COLOR: #ffffff;
+ COLOR: #000000;
+}
+PRE
+{
+ MARGIN-LEFT: 2em;
+ FONT-FAMILY: Courier,
+ monospace;
+}
+CODE
+{
+ FONT-FAMILY: Courier,
+ monospace;
+}
+CODE.as_pre
+{
+ white-space: pre;
+}
+.index
+{
+ TEXT-ALIGN: left;
+}
+.page-index
+{
+ TEXT-ALIGN: left;
+}
+.definition
+{
+ TEXT-ALIGN: left;
+}
+.footnote
+{
+ FONT-SIZE: 66%;
+ VERTICAL-ALIGN: super;
+ TEXT-DECORATION: none;
+}
+.function-semantics
+{
+ CLEAR: left;
+}
\ No newline at end of file

Added: sandbox/contract/boost.png
==============================================================================
Binary file. No diff available.

Added: sandbox/contract/boostcpp.jam
==============================================================================
--- (empty file)
+++ sandbox/contract/boostcpp.jam 2013-02-28 18:24:21 EST (Thu, 28 Feb 2013)
@@ -0,0 +1,593 @@
+# Boost.Build support specific for the Boost C++ Libraries.
+# Copyright Vladimir Prus 2002-2010.
+# Copyright Dave Abrahams 2005-2006.
+# Copyright Rene Rivera 2005-2007.
+# Copyright Douglas Gregor 2005.
+#
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+import "class" : new ;
+import common ;
+import configure ;
+import build-system ;
+import generate ;
+import modules ;
+import option ;
+import os ;
+import package ;
+import path ;
+import project ;
+import regex ;
+import set ;
+import targets ;
+
+
+##############################################################################
+#
+# 0. General setup. Parse options, check them.
+#
+##############################################################################
+
+BOOST_ROOT = [ modules.binding $(__name__) ] ;
+BOOST_ROOT = $(BOOST_ROOT:D) ;
+
+rule set-version ( version )
+{
+ BOOST_VERSION = $(version) ;
+
+ local version-tag = [ MATCH ^([^.]+)[.]([^.]+)[.]([^.]+) : $(BOOST_VERSION)
+ ] ;
+ if $(version-tag[3]) = 0
+ {
+ version-tag = $(version-tag[1-2]) ;
+ }
+ BOOST_VERSION_TAG = $(version-tag:J=_) ;
+}
+
+# Option to choose how many variants to build. The default is "minimal".
+build-type = [ option.get build-type ] ;
+build-type ?= minimal ;
+if ! ( $(build-type) in complete minimal )
+{
+ EXIT The value of the --build-type option should be either 'complete' or
+ 'minimal' ;
+}
+
+# What kind of layout are we doing?
+layout = [ option.get layout : "" ] ;
+# On Windows, we used versioned layout by default in order to be compatible with
+# autolink. On other systems, we use system layout which is what every other
+# program uses. Note that the Windows check is static, and will not be affected
+# by specific build properties used.
+if ! $(layout)
+{
+ if [ os.name ] = NT
+ {
+ layout = versioned ;
+ }
+ else
+ {
+ layout = system ;
+ }
+}
+layout-$(layout) = true ;
+
+if $(layout) = system && $(build-type) = complete
+{
+ ECHO error: Cannot use --layout=system with --build-type complete. ;
+ ECHO error: Please use either --layout=versioned or --layout=tagged ;
+ ECHO error: if you wish to build multiple variants. ;
+ if [ os.name ] != NT
+ {
+ ECHO error: Note that --layout=system is used by default on Unix
+ starting with Boost 1.40. ;
+ }
+ EXIT ;
+}
+
+# Possible stage only location.
+stage-locate = [ option.get stagedir ] ;
+stage-locate ?= stage ;
+BOOST_STAGE_LOCATE = $(stage-locate) ;
+
+# Custom build ID.
+build-id = [ option.get buildid ] ;
+if $(build-id)
+{
+ BUILD_ID = [ regex.replace $(build-id) "[*\\/:.\"\' ]" _ ] ;
+}
+
+# Python build id (for Python libraries only).
+python-id = [ option.get "python-buildid" ] ;
+if $(python-id)
+{
+ PYTHON_ID = [ regex.replace $(python-id) [*\\/:.\"\'] _ ] ;
+}
+
+
+################################################################################
+#
+# 1. 'tag' function adding decorations suitable to the properties if versioned
+# or tagged layout is requested. Called from Jamroot.
+#
+################################################################################
+
+rule tag ( name : type ? : property-set )
+{
+ if $(type) in STATIC_LIB SHARED_LIB IMPORT_LIB
+ {
+ local result ;
+ if $(layout) = versioned
+ {
+ result = [ common.format-name
+ <base> <toolset> <threading> <runtime> -$(BOOST_VERSION_TAG)
+ -$(BUILD_ID)
+ : $(name) : $(type) : $(property-set) ] ;
+ }
+ else if $(layout) = tagged
+ {
+ result = [ common.format-name
+ <base> <threading> <runtime>
+ -$(BUILD_ID)
+ : $(name) : $(type) : $(property-set) ] ;
+ }
+ else if $(layout) = system
+ {
+ result = [ common.format-name
+ <base>
+ -$(BUILD_ID)
+ : $(name) : $(type) : $(property-set) ] ;
+ }
+ else
+ {
+ EXIT error: invalid layout '$(layout:E=)' ;
+ }
+
+ # Optionally add version suffix. On NT, library with version suffix will
+ # not be recognized by linkers. On CYGWIN, we get strage duplicate
+ # symbol errors when library is generated with version suffix. On OSX,
+ # version suffix is not needed -- the linker expects the
+ # libFoo.1.2.3.dylib format. AIX linkers do not accept version suffixes
+ # either. Pgi compilers can not accept a library with version suffix.
+ if $(type) = SHARED_LIB &&
+ ! [ $(property-set).get <target-os> ] in windows cygwin darwin aix &&
+ ! [ $(property-set).get <toolset> ] in pgi
+ {
+ result = $(result).$(BOOST_VERSION) ;
+ }
+
+ return $(result) ;
+ }
+}
+
+
+################################################################################
+#
+# 2. Declare targets that build and install all libraries. Specifically:
+#
+# - 'stage-proper' that puts all libraries in stage/lib
+# - 'install-proper' that install libraries and headers to system location
+# - 'stage-unversioned' that creates links to libraries without boost version
+# in name
+# - 'install-unversioned' which creates unversioned linked to installed
+# libraries.
+#
+################################################################################
+
+# Worker function suitable to the 'generate' metatarget. Creates a link to
+# 'source', striping any version number information from the name.
+rule make-unversioned-links ( project name ? : property-set : sources * )
+{
+ local filter ;
+ if [ modules.peek : NT ]
+ {
+ filter = (.*[.]lib) ;
+ }
+ else
+ {
+ filter =
+ (.*[.]so)[.0-9]*
+ (.*[.]dylib)
+ (.*[.]a) ;
+ }
+
+ local result ;
+ for local s in $(sources)
+ {
+ local m = [ MATCH ^(.*)-[0-9_]+$(filter)$ : [ $(s).name ] ] ;
+ if $(m)
+ {
+ local ea = [ $(s).action ] ;
+ local ep = [ $(ea).properties ] ;
+ local a = [ new non-scanning-action $(s) : symlink.ln : $(ep) ] ;
+ result += [ new file-target $(m:J=) exact : [ $(s).type ] :
+ $(project) : $(a) ] ;
+ }
+ }
+ return $(result) ;
+}
+
+rule filtered-target ( name : message + : sources + : requirements * )
+{
+ message $(name)-message : warning: $(message) ;
+ alias $(name) : $(sources) : $(requirements) ;
+ alias $(name) : $(name)-message ;
+
+ local p = [ project.current ] ;
+ $(p).mark-target-as-explicit $(name) ;
+ $(p).mark-target-as-explicit $(name)-message ;
+}
+
+rule declare_install_and_stage_proper_targets ( libraries * : headers * )
+{
+ for local l in $(libraries)
+ {
+ if $(l) = locale
+ {
+ filtered-target $(l)-for-install :
+ Skipping Boost.Locale library with threading=single. :
+ libs/$(l)/build : <threading>multi ;
+ }
+ else if $(l) = wave
+ {
+ filtered-target $(l)-for-install :
+ Skipping Boost.Wave library with threading=single. :
+ libs/$(l)/build : <threading>multi ;
+ }
+ else if $(l) = thread
+ {
+ filtered-target $(l)-for-install :
+ Skipping Boost.Thread library with threading=single. :
+ libs/$(l)/build : <threading>multi ;
+ }
+ else
+ {
+ alias $(l)-for-install : libs/$(l)/build ;
+ }
+ }
+ local library-targets = $(libraries)-for-install ;
+
+ install-requirements = <install-source-root>$(BOOST_ROOT)/boost ;
+
+ if $(layout-versioned)
+ {
+ install-requirements +=
+ <install-header-subdir>boost-$(BOOST_VERSION_TAG)/boost ;
+ }
+ else
+ {
+ install-requirements += <install-header-subdir>boost ;
+ }
+
+ if [ os.name ] = NT
+ {
+ install-requirements += <install-default-prefix>C:/Boost ;
+ }
+ else
+ {
+ install-requirements += <install-default-prefix>/usr/local ;
+ }
+
+ p = [ project.current ] ;
+
+ # Complete install.
+ package.install install-proper
+ : $(install-requirements) <install-no-version-symlinks>on
+ :
+ : $(libraries)-for-install
+ : $(headers)
+ ;
+ $(p).mark-target-as-explicit install-proper ;
+
+ # Install just library.
+ install stage-proper
+ : $(libraries)-for-install
+ : <location>$(stage-locate)/lib
+ <install-dependencies>on <install-type>LIB
+ <install-no-version-symlinks>on
+ ;
+ $(p).mark-target-as-explicit stage-proper ;
+
+ # Commented out as it does not seem to work. Whoever wrote this originally,
+ # left some typos in the code, but when that got corrected and the code got
+ # enabled - it started reporting ambiguous/duplicate target Boost Build
+ # errors. Anyone requiring unversioned staged libraries needs to correct
+ # those errors before reenabling this code. For more detailed information
+ # see the related Boost library development mailing list thread at
+ # 'http://lists.boost.org/Archives/boost/2012/06/194312.php'.
+ # (06.07.2012.) (Jurko)
+ #~ if $(layout-versioned) && ( [ modules.peek : NT ] || [ modules.peek : UNIX ] )
+ #~ {
+ #~ generate stage-unversioned : stage-proper :
+ #~ <generating-rule>@boostcpp.make-unversioned-links ;
+ #~ $(p).mark-target-as-explicit stage-unversioned ;
+ #~
+ #~ generate install-unversioned : install-proper :
+ #~ <generating-rule>@boostcpp.make-unversioned-links ;
+ #~ $(p).mark-target-as-explicit install-unversioned ;
+ #~ }
+ #~ else
+ {
+ # Create do-nothing aliases.
+ alias stage-unversioned ;
+ $(p).mark-target-as-explicit stage-unversioned ;
+ alias install-unversioned ;
+ $(p).mark-target-as-explicit install-unversioned ;
+ }
+}
+
+
+################################################################################
+#
+# 3. Declare top-level targets 'stage' and 'install'. These examine the
+# --build-type option and, in case it is 'complete', build the 'install-proper'
+# and 'stage-proper' targets with a number of property sets.
+#
+################################################################################
+
+class top-level-target : alias-target-class
+{
+ import modules ;
+
+ rule __init__ ( name : project : sources * : requirements *
+ : default-build * : usage-requirements * )
+ {
+ alias-target-class.__init__ $(name) : $(project) : $(sources) :
+ $(requirements) : $(default-build) : $(usage-requirements) ;
+
+ self.build-type = [ modules.peek boostcpp : build-type ] ;
+ # On Linux, we build the release variant by default, since few users
+ # will ever want to debug C++ Boost libraries, and there is no ABI
+ # incompatibility between debug and release variants. We build shared
+ # and static libraries since that is what most packages seem to provide
+ # (.so in libfoo and .a in libfoo-dev).
+ self.minimal-properties = [ property-set.create <variant>release
+ <threading>multi <link>shared <link>static <runtime-link>shared ] ;
+ # On Windows, new IDE projects use:
+ #
+ # runtime-link=dynamic, threading=multi, variant=(debug|release)
+ #
+ # and in addition, C++ Boost's autolink defaults to static linking.
+ self.minimal-properties-win = [ property-set.create <variant>debug
+ <variant>release <threading>multi <link>static <runtime-link>shared
+ ] ;
+
+ self.complete-properties = [ property-set.create
+ <variant>debug <variant>release
+ <threading>single <threading>multi
+ <link>shared <link>static
+ <runtime-link>shared <runtime-link>static ] ;
+ }
+
+ rule generate ( property-set )
+ {
+ modules.poke : top-level-targets : [ modules.peek : top-level-targets ]
+ $(self.name) ;
+ if $(self.build-type) = minimal
+ {
+ local expanded ;
+
+ local os = [ $(property-set).get <target-os> ] ;
+ # Because we completely override the parent's 'generate' we need to
+ # check for default feature values ourselves.
+ if ! $(os)
+ {
+ os = [ feature.defaults <target-os> ] ;
+ os = $(os:G=) ;
+ }
+
+ if $(os) = windows
+ {
+ expanded = [ targets.apply-default-build $(property-set)
+ : $(self.minimal-properties-win) ] ;
+ }
+ else
+ {
+ expanded = [ targets.apply-default-build $(property-set)
+ : $(self.minimal-properties) ] ;
+ }
+ return [ build-multiple $(expanded) ] ;
+ }
+ else if $(self.build-type) = complete
+ {
+ local expanded = [ targets.apply-default-build $(property-set)
+ : $(self.complete-properties) ] ;
+
+ # Filter inappopriate combinations.
+ local filtered ;
+ for local p in $(expanded)
+ {
+ # See comment in handle-static-runtime regarding this logic.
+ if [ $(p).get <link> ] = shared
+ && [ $(p).get <runtime-link> ] = static
+ && [ $(p).get <toolset> ] != cw
+ {
+ # Skip this.
+ }
+ else
+ {
+ filtered += $(p) ;
+ }
+ }
+ return [ build-multiple $(filtered) ] ;
+ }
+ else
+ {
+ import errors ;
+ errors.error "Unknown build type" ;
+ }
+ }
+
+ rule build-multiple ( property-sets * )
+ {
+ local usage-requirements = [ property-set.empty ] ;
+ local result ;
+ for local p in $(property-sets)
+ {
+ local r = [ alias-target-class.generate $(p) ] ;
+ if $(r)
+ {
+ usage-requirements = [ $(usage-requirements).add $(r[1]) ] ;
+ result += $(r[2-]) ;
+ }
+ }
+ return $(usage-requirements) [ sequence.unique $(result) ] ;
+ }
+}
+
+rule declare_top_level_targets ( libraries * : headers * )
+{
+ declare_install_and_stage_proper_targets $(libraries) : $(headers) ;
+
+ targets.create-metatarget top-level-target : [ project.current ]
+ : install
+ : install-proper install-unversioned
+ ;
+ targets.create-metatarget top-level-target : [ project.current ]
+ : stage
+ : stage-proper stage-unversioned
+ ;
+
+ p = [ project.current ] ;
+ $(p).mark-target-as-explicit install stage ;
+
+ # This target is built by default, and will forward to 'stage' after
+ # producing some explanations.
+ targets.create-metatarget top-level-target : [ project.current ]
+ : forward
+ : explain stage
+ ;
+}
+
+
+stage-abs = [ path.native [ path.root $(stage-locate)/lib [ path.pwd ] ] ] ;
+
+
+################################################################################
+#
+# 4. Add hook to report configuration before the build, and confirmation with
+# setup instructions after the build.
+#
+################################################################################
+
+message explain : "\nBuilding the Boost C++ Libraries.\n\n" ;
+local p = [ project.current ] ;
+$(p).mark-target-as-explicit explain ;
+
+rule pre-build ( )
+{
+ local tl = [ modules.peek : top-level-targets ] ;
+ if stage in $(tl) || install in $(tl)
+ {
+ # FIXME: Remove 'if' when Boost regression tests start using trunk bjam.
+ if PAD in [ RULENAMES ]
+ {
+ configure.print-component-configuration ;
+ }
+ }
+}
+IMPORT $(__name__) : pre-build : : $(__name__).pre-build ;
+build-system.set-pre-build-hook $(__name__).pre-build ;
+
+# FIXME: Revise stage_abs.
+rule post-build ( ok ? )
+{
+ if forward in [ modules.peek : top-level-targets ]
+ {
+ if $(ok)
+ {
+ ECHO "
+
+The Boost C++ Libraries were successfully built!
+
+The following directory should be added to compiler include paths:
+
+ $(BOOST_ROOT)
+
+The following directory should be added to linker library paths:
+
+ $(stage-abs)
+" ;
+ }
+ }
+}
+IMPORT $(__name__) : post-build : : $(__name__).post-build ;
+build-system.set-post-build-hook $(__name__).post-build ;
+
+
+################################################################################
+#
+# 5. Top-level setup.
+#
+################################################################################
+
+# Decides which libraries are to be installed by looking at --with-<library>
+# --without-<library> arguments. Returns the list of directories under "libs"
+# which must be built and installed.
+#
+rule libraries-to-install ( existing-libs * )
+{
+ local argv = [ modules.peek : ARGV ] ;
+ local with-parameter = [ MATCH ^--with-(.*) : $(argv) ] ;
+ local without-parameter = [ MATCH ^--without-(.*) : $(argv) ] ;
+
+ if ! $(with-parameter) && ! $(without-parameter)
+ {
+ # Nothing is specified on command line. See if maybe project-config.jam
+ # has some choices.
+ local libs = [ modules.peek project-config : libraries ] ;
+ with-parameter = [ MATCH ^--with-(.*) : $(libs) ] ;
+ without-parameter = [ MATCH ^--without-(.*) : $(libs) ] ;
+ }
+
+ # Do some checks.
+ if $(with-parameter) && $(without-parameter)
+ {
+ EXIT error: both --with-<library> and --without-<library> specified ;
+ }
+
+ local wrong = [ set.difference $(with-parameter) : $(existing-libs) ] ;
+ if $(wrong)
+ {
+ EXIT error: wrong library name '$(wrong[1])' in the --with-<library>
+ option. ;
+ }
+ local wrong = [ set.difference $(without-parameter) : $(existing-libs) ] ;
+ if $(wrong)
+ {
+ EXIT error: wrong library name '$(wrong[1])' in the --without-<library>
+ option. ;
+ }
+
+ if $(with-parameter)
+ {
+ return [ set.intersection $(existing-libs) : $(with-parameter) ] ;
+ }
+ else
+ {
+ return [ set.difference $(existing-libs) : $(without-parameter) ] ;
+ }
+}
+
+rule declare-targets ( all-libraries * : headers * )
+{
+ configure.register-components $(all-libraries) ;
+
+ # Select the libraries to install.
+ libraries = [ libraries-to-install $(all-libraries) ] ;
+ configure.components-building $(libraries) ;
+
+ if [ option.get "show-libraries" : : true ]
+ {
+ ECHO The following libraries require building: ;
+ for local l in $(libraries)
+ {
+ ECHO " - $(l)" ;
+ }
+ EXIT ;
+ }
+
+ declare_top_level_targets $(libraries) : $(headers) ;
+}

Added: sandbox/contract/boostcpp.py
==============================================================================
--- (empty file)
+++ sandbox/contract/boostcpp.py 2013-02-28 18:24:21 EST (Thu, 28 Feb 2013)
@@ -0,0 +1,459 @@
+# Boost.Build support specific for the Boost C++ Libraries.
+# Copyright Vladimir Prus 2002-2010.
+# Copyright Dave Abrahams 2005-2006.
+# Copyright Rene Rivera 2005-2007.
+# Copyright Douglas Gregor 2005.
+#
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+import b2.util.option as option
+import b2.build.feature as feature
+import b2.build.virtual_target as virtual_target
+import b2.build.targets as targets
+import b2.build.property_set as property_set
+import b2.build_system as build_system
+import b2.build.configure as configure
+import b2.tools.stage as stage
+import b2.tools.package as package
+
+import b2.util.regex as regex
+import b2.util.set as set
+
+from b2.build.alias import AliasTarget, alias
+from b2.tools.message import message
+
+from b2.manager import get_manager
+from b2.util import bjam_signature, value_to_jam
+from b2.util.sequence import unique
+
+
+
+import sys
+import os
+
+# FIXME: temporary fix until I port the xsltproc module
+feature.feature("xsl:param", [], ["free"])
+
+
+##############################################################################
+#
+# 0. General setup. Parse options, check them.
+#
+##############################################################################
+
+BOOST_ROOT = get_manager().projects().loaded_tool_module_path_[__name__]
+
+print "HERE I AM"
+@bjam_signature((["version"],))
+def set_version(version):
+ global BOOST_VERSION, BOOST_VERSION_TAG
+
+ BOOST_VERSION = version
+ pieces = version.split(".")
+ if pieces[2] == "0":
+ pieces = pieces[0:2]
+
+
+ BOOST_VERSION_TAG = "_".join(pieces)
+
+# Option to choose how many variants to build. The default is "minimal".
+build_type = option.get("build-type", "minimal")
+if not build_type in ["minimal", "complete"]:
+ get_manager().errors()("The value of the --build-type option should be either 'complete' or 'minimal'")
+
+# What kind of layout are we doing?
+layout = option.get("layout")
+# On Windows, we used versioned layout by default in order to
+# be compatible with autolink. On other systems, we use system
+# layout which is what every other program uses. Note that windows
+# check is static, and won't
+if not layout:
+ if os.name == "nt":
+ layout = "versioned"
+ else:
+ layout = "system"
+
+if layout == "system" and build_type == "complete":
+ get_manager().errors()(
+ "Cannot use --layout=system with --build-type complete.\n"
+ "Please used either --layout=versioned or --layout=tagged\n"
+ "if you wish to build multiple variants.")
+
+# Possible stage only location.
+stage_locate = option.get("stagedir", "stage")
+BOOST_STAGE_LOCATE = stage_locate
+
+# Custom build ID.
+build_id = option.get("buildid")
+if build_id:
+ BUILD_ID = re.sub("[*\\/:.\"\' ]", "_", build_id)
+
+# Python build id (only for Python libraries)
+python_id = option.get("python-buildid")
+if python_id:
+ PYTHON_ID = re.sub("[*\\/:.\"\' ]", "_", python_id)
+
+##############################################################################
+#
+# 1. The 'tag' function that adds decoration suitable to the properties if
+# versioned or tagged layout is requested. This function is called from
+# Jamroot
+#
+##############################################################################
+
+def tag(name, type, ps):
+ if type in ["STATIC_LIB", "SHARED_LIB", "IMPORT_LIB"]:
+
+ pass
+
+
+ ## FIXME
+ ## if $(layout) = versioned
+ ## {
+ ## result = [ common.format-name
+ ## <base> <toolset> <threading> <runtime> -$(BOOST_VERSION_TAG)
+ ## -$(BUILD_ID)
+ ## : $(name) : $(type) : $(property-set) ] ;
+ ## }
+ ## else if $(layout) = tagged
+ ## {
+ ## result = [ common.format-name
+ ## <base> <threading> <runtime>
+ ## -$(BUILD_ID)
+ ## : $(name) : $(type) : $(property-set) ] ;
+ ## }
+ ## else if $(layout) = system
+ ## {
+ ## result = [ common.format-name
+ ## <base>
+ ## -$(BUILD_ID)
+ ## : $(name) : $(type) : $(property-set) ] ;
+ ## }
+ ## else
+ ## {
+ ## ECHO "error: invalid layout '$(layout:E=)'" ;
+ ## EXIT ;
+ ## }
+
+ ## # Optionally add version suffix. On NT, library with version suffix
+ ## # will not be recognized by linkers. On CYGWIN, we get strage
+ ## # duplicate symbol errors when library is generated with version
+ ## # suffix. On OSX, version suffix is not needed -- the linker expects
+ ## # the libFoo.1.2.3.dylib format. AIX linkers do not accept version
+ ## # suffixes either. Pgi compilers can not accept library with version
+ ## # suffix.
+ ## if $(type) = SHARED_LIB &&
+ ## ( ! ( [ $(property-set).get <target-os> ] in windows cygwin darwin aix ) &&
+ ## ! ( [ $(property-set).get <toolset> ] in pgi ) )
+ ## {
+ ## result = $(result).$(BOOST_VERSION) ;
+ ## }
+
+ ## return $(result) ;
+ ## }
+
+
+##############################################################################
+#
+# 2. Declare targets that build and install all libraries. Specifically:
+#
+# - 'stage-proper' that puts all libraries in stage/lib
+# - 'install-proper' that install libraries and headers to system location
+# - 'stage-unversioned' that creates links to libraries without boost veriosn
+# in name
+# - 'install-unversioned' which creates unversioned linked to installed
+# libraries.
+#
+##############################################################################
+
+# Worker function suitable to the 'generate' metatarget. Creates a link
+# to 'source', striping any version number from the name.
+def make_unversioned_links(project, name, ps, sources):
+
+ result = []
+ filtered = []
+ nt = os.name == "nt"
+
+ # Collect the libraries that have the version number in 'filtered'.
+ for s in sources:
+ if nt:
+ m = s.name().endswith(".lib")
+ else:
+ m = re.match("(.*[.]so[.0-9]+)" "(.*[.]dylib)" "(.*[.]a)", s.name())
+
+ if m:
+ filtered.append(s)
+
+ # Create links without version.
+ for s in filtered:
+ a = virtual_target.NonScanningAction(s, "symlink.ln", s.action().properties())
+ name = s.name()
+
+ if nt:
+ m = re.match("(.*)-[0-9_]+(.*[.]lib)", name)
+ else:
+ m = re.match("(.*)-[0-9_]+(.*[.]so)[.0-9]*", name)
+ if not m:
+ m = re.match("(.*)-[0-9_]+(.*[.]dylib)", name)
+ if not m:
+ m = re.match("(.*)-[0-9_]+(.*[.]a)", name)
+ if not m:
+ m = re.match("(.*)-[0-9_]+(.*[.]dll[.]a)", name)
+
+ new_name = m.group(1) + m.group(2)
+ result.append(virtual_target.FileTarget(new_name, s.type(), project, a,
+ exact=True))
+
+ return result
+
+def declare_install_and_stage_proper_targets(libraries, headers):
+
+ install_requirements = ["<install-source-root>" + BOOST_ROOT + "/boost"]
+ if layout == "versioned":
+ install_requirements.append("<install-header-subdir>boost-" + BOOST_VERSION_TAG + "/boost")
+ else:
+ install_requirements.append("<install-header-subdir>boost")
+
+ if os.name == "nt":
+ default_prefix = "C:/Boost"
+ else:
+ default_prefix = "/usr/local"
+
+ install_requirements.append("<install-default-prefix>" + default_prefix)
+
+ p = get_manager().projects().current()
+ package.install("install-proper",
+ install_requirements + ["<install-no-version-symlinks>on"],
+ [],
+ ["libs/%s/build" % l for l in libraries],
+ headers)
+ p.mark_targets_as_explicit(["install-proper"])
+
+ stage.install("stage-proper",
+ ["libs/%s/build" % l for l in libraries],
+ ["<location>" + stage_locate + "/lib",
+ "<install-dependencies>on", "<install-type>LIB",
+ "<install-no-version-symlinks>on"])
+ p.mark_targets_as_explicit(["stage-proper"])
+
+ gr = value_to_jam(make_unversioned_links)
+ gr = "<generating-rule>" + gr
+
+
+ if layout == "versioned":
+ generate("stage-unversioned", ["stage-proper"], [gr])
+ generate("install-unversioned", ["install-proper"], [gr])
+ else:
+ # Create do-nothing aliases.
+ alias("stage-unversioned")
+ alias("install-unversioned")
+
+ p.mark_targets_as_explicit(["stage-unversioned", "install-unversioned"])
+
+
+##############################################################################
+#
+# 3. Declare top-level targets 'stage' and 'install'. These examine
+# the --build-type option and, in case it's 'complete', build the
+# 'install-proper' and 'stage-proper' targets with a number of
+# property sets.
+#
+##############################################################################
+
+# The names of all top-level targets that were built.
+top_level_targets = []
+
+class TopLevelTarget(AliasTarget):
+
+ def __init__(self, name, project, sources, requirements, default_build,
+ usage_requirements):
+
+ AliasTarget.__init__(self, name, project, sources, requirements, default_build,
+ usage_requirements)
+
+ # On Linux, we build release variant by default, since few users will
+ # ever want to debug C++ Boost libraries, and there's no ABI
+ # incompatibility between debug and release variants. We build
+ # shared and static libraries since that's what most packages
+ # seem to provide (.so in libfoo and .a in libfoo-dev).
+ self.minimal_properties = property_set.create([
+ "<variant>release", "<threading>multi", "<link>shared", "<link>static",
+ "<runtime-link>shared"])
+ # On Windows, new IDE projects use:
+ #
+ # runtime-link=dynamic, threading=multi, variant=(debug|release)
+ #
+ # and in addition, C++ Boost's autolink defaults to static linking.
+ self.minimal_properties_win = property_set.create([
+ "<variant>debug", "<variant>release", "<threading>multi", "<link>static",
+ "<runtime-link>shared"])
+
+ self.complete_properties = property_set.create([
+ "<variant>debug", "<variant>release",
+ "<threading>single", "<threading>multi"
+ "<link>shared", "<link>static",
+ "<runtime-link>shared", "<runtime-link>static"])
+
+ def generate(self, ps):
+ global top_level_targets
+ top_level_targets.append(self.name())
+
+ if build_type == "minimal":
+
+ os = ps.get('target-os')
+ # Because we completely override parent's 'generate'
+ # we need to check for default value of feature ourself.
+ if not os:
+ os = feature.get('target-os').default()
+
+ if os == "windows":
+ expanded = targets.apply_default_build(ps, self.minimal_properties_win)
+ else:
+ expanded = targets.apply_default_build(ps, self.minimal_properties)
+ return self.build_multiple(expanded)
+
+ elif build_type == "complete":
+
+ expanded = targets.apply_default_build(ps, self.complete_properties)
+
+ # Filter inappopriate combinations
+ filtered = []
+ for p in expanded:
+
+ # See comment in handle-static-runtime regarding this logic.
+ if ps.get("link") == ["shared"] and p.get("runtime-link") == ["static"] \
+ and p.get("toolset") != ["cw"]:
+ # Skip this
+ pass
+ else:
+ filtered.append(p)
+
+ return build_multiple(filtered)
+
+ else:
+
+ get_manager().errors("Unknown build type")
+
+ def build_multiple(self, property_sets):
+
+ usage_requirements = property_set.empty()
+ result = []
+ for p in property_sets:
+ r = AliasTarget.generate(self, p)
+ if r:
+ usage_requirements = usage_requirements.add(r.usage_requirements())
+ result.extend(r.targets())
+
+ return targets.GenerateResult(usage_requirements, unique(result))
+
+
+def declare_top_level_targets(libraries, headers):
+
+ declare_install_and_stage_proper_targets(libraries, headers)
+
+ targets.create_metatarget(TopLevelTarget,
+ "install",
+ ["install-proper", "install-unversioned"])
+ targets.create_metatarget(TopLevelTarget,
+ "stage",
+ ["stage-proper", "stage-unversioned"])
+
+ message("explain", "\nBuilding the Boost C++ Libraries.\n\n")
+
+ get_manager().projects().current().mark_targets_as_explicit(
+ ["install", "stage", "explain"])
+
+ # This target is built by default, and will forward to 'stage'
+ # after producing some explanations.
+ targets.create_metatarget(TopLevelTarget,
+ "forward",
+ ["explain", "stage"])
+
+
+stage_abs = os.path.abspath(os.path.join(stage_locate, "lib"))
+
+##############################################################################
+#
+# 4. Add hook to report configuration before the build, and confirmation
+# with setup instructions after the build
+#
+##############################################################################
+
+def pre_build():
+ if "stage" in top_level_targets or "install" in top_level_targets:
+ configure.print_component_configuration()
+
+build_system.add_pre_build_hook(pre_build)
+
+def post_build(ok):
+ if "forward" in top_level_targets and ok:
+ print """\n\nThe Boost C++ Libraries were successfully built!
+
+The following directory should be added to compiler include paths:
+
+ %s
+
+The following directory should be added to linker library paths:
+
+ %s
+""" % (BOOST_ROOT, stage_abs)
+
+build_system.set_post_build_hook(post_build)
+
+##############################################################################
+#
+# 5. Top-level setup
+#
+##############################################################################
+
+
+def libraries_to_install(existing_libraries):
+ # Decides which libraries are to be installed by looking at --with-<library>
+ # --without-<library> arguments. Returns the list of directories under "libs"
+ # which must be built and installed.
+
+ with_parameter = regex.transform(sys.argv, "--with-(.*)")
+ without_parameter = regex.transform(sys.argv, "--without-(.*)")
+
+ if not with_parameter and not without_parameter:
+ # Nothing is specified on command line. See if maybe
+ # project-config.jam has some choices.
+ project_config_libs = bjam.call("peek", "project-config", "libraries")
+ with_parameter = regex.transform(project_config_libs, "--with-(.*)")
+ without_parameter = regex.transform(project_config_libs, "--without-(.*)")
+
+ # Do some checks.
+ if with_parameter and without_parameter:
+ get_manager().errors()("both --with-<library> and --without-<library> specified")
+
+ wrong = set.difference(with_parameter, existing_libraries)
+ if wrong:
+ get_manager().errors()("wrong library name '" + wrong[0] + "' in the --with-<library> option.")
+
+ wrong = set.difference(without_parameter, existing_libraries)
+ if wrong:
+ get_manager().errors()("wrong library name '" + wrong[0] + "' in the --without-<library> option.")
+
+ if with_parameter:
+ return set.intersection(existing_libraries, with_parameter)
+ else:
+ return set.difference(existing_libraries, without_parameter)
+
+def declare_targets(all_libraries, headers):
+
+ configure.register_components(all_libraries)
+
+ # Select the libraries to install.
+ libraries = libraries_to_install(all_libraries)
+ configure.components_building(libraries)
+
+ if option.get("show-libraries", None, True):
+
+ print "The following libraries require building:"
+ for l in libraries:
+ print " - " + l
+ sys.exit(0)
+
+ declare_top_level_targets(libraries, headers)

Added: sandbox/contract/bootstrap.bat
==============================================================================
--- (empty file)
+++ sandbox/contract/bootstrap.bat 2013-02-28 18:24:21 EST (Thu, 28 Feb 2013)
@@ -0,0 +1,81 @@
+@ECHO OFF
+
+REM Copyright (C) 2009 Vladimir Prus
+REM
+REM Distributed under the Boost Software License, Version 1.0.
+REM (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+
+ECHO Building Boost.Build engine
+if exist ".\tools\build\v2\engine\bin.ntx86\b2.exe" del tools\build\v2\engine\bin.ntx86\b2.exe
+if exist ".\tools\build\v2\engine\bin.ntx86\bjam.exe" del tools\build\v2\engine\bin.ntx86\bjam.exe
+if exist ".\tools\build\v2\engine\bin.ntx86_64\b2.exe" del tools\build\v2\engine\bin.ntx86_64\b2.exe
+if exist ".\tools\build\v2\engine\bin.ntx86_64\bjam.exe" del tools\build\v2\engine\bin.ntx86_64\bjam.exe
+pushd tools\build\v2\engine
+
+call .\build.bat %* > ..\..\..\..\bootstrap.log
+@ECHO OFF
+
+popd
+
+if exist ".\tools\build\v2\engine\bin.ntx86\bjam.exe" (
+ copy .\tools\build\v2\engine\bin.ntx86\b2.exe . > nul
+ copy .\tools\build\v2\engine\bin.ntx86\bjam.exe . > nul
+ goto :bjam_built)
+
+if exist ".\tools\build\v2\engine\bin.ntx86_64\bjam.exe" (
+ copy .\tools\build\v2\engine\bin.ntx86_64\b2.exe . > nul
+ copy .\tools\build\v2\engine\bin.ntx86_64\bjam.exe . > nul
+ goto :bjam_built)
+
+goto :bjam_failure
+
+:bjam_built
+
+REM Ideally, we should obtain the toolset that build.bat has
+REM guessed. However, it uses setlocal at the start and does not
+REM export BOOST_JAM_TOOLSET, and I don't know how to do that
+REM properly. Default to msvc for now.
+set toolset=msvc
+
+ECHO import option ; > project-config.jam
+ECHO. >> project-config.jam
+ECHO using %toolset% ; >> project-config.jam
+ECHO. >> project-config.jam
+ECHO option.set keep-going : false ; >> project-config.jam
+ECHO. >> project-config.jam
+
+ECHO.
+ECHO Bootstrapping is done. To build, run:
+ECHO.
+ECHO .\b2
+ECHO.
+ECHO To adjust configuration, edit 'project-config.jam'.
+ECHO Further information:
+ECHO.
+ECHO - Command line help:
+ECHO .\b2 --help
+ECHO.
+ECHO - Getting started guide:
+ECHO http://boost.org/more/getting_started/windows.html
+ECHO.
+ECHO - Boost.Build documentation:
+ECHO http://www.boost.org/boost-build2/doc/html/index.html
+
+goto :end
+
+:bjam_failure
+
+ECHO.
+ECHO Failed to build Boost.Build engine.
+ECHO Please consult bootstrap.log for furter diagnostics.
+ECHO.
+ECHO You can try to obtain a prebuilt binary from
+ECHO.
+ECHO http://sf.net/project/showfiles.php?group_id=7586^&package_id=72941
+ECHO.
+ECHO Also, you can file an issue at http://svn.boost.org
+ECHO Please attach bootstrap.log in that case.
+
+goto :end
+
+:end

Added: sandbox/contract/bootstrap.sh
==============================================================================
--- (empty file)
+++ sandbox/contract/bootstrap.sh 2013-02-28 18:24:21 EST (Thu, 28 Feb 2013)
@@ -0,0 +1,397 @@
+#!/bin/sh
+# Copyright (C) 2005, 2006 Douglas Gregor.
+# Copyright (C) 2006 The Trustees of Indiana University
+#
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+
+# boostinspect:notab - Tabs are required for the Makefile.
+
+BJAM=""
+TOOLSET=""
+BJAM_CONFIG=""
+BUILD=""
+PREFIX=/usr/local
+EPREFIX=
+LIBDIR=
+INCLUDEDIR=
+LIBS=""
+PYTHON=python
+PYTHON_VERSION=
+PYTHON_ROOT=
+ICU_ROOT=
+
+# Internal flags
+flag_no_python=
+flag_icu=
+flag_show_libraries=
+
+for option
+do
+ case $option in
+
+ -help | --help | -h)
+ want_help=yes ;;
+
+ -prefix=* | --prefix=*)
+ PREFIX=`expr "x$option" : "x-*prefix=\(.*\)"`
+ ;;
+
+ -exec-prefix=* | --exec-prefix=*)
+ EPREFIX=`expr "x$option" : "x-*exec-prefix=\(.*\)"`
+ ;;
+
+ -libdir=* | --libdir=*)
+ LIBDIR=`expr "x$option" : "x-*libdir=\(.*\)"`
+ ;;
+
+ -includedir=* | --includedir=*)
+ INCLUDEDIR=`expr "x$option" : "x-*includedir=\(.*\)"`
+ ;;
+
+ -show-libraries | --show-libraries )
+ flag_show_libraries=yes
+ ;;
+
+ -with-bjam=* | --with-bjam=* )
+ BJAM=`expr "x$option" : "x-*with-bjam=\(.*\)"`
+ ;;
+
+ -with-icu | --with-icu )
+ flag_icu=yes
+ ;;
+
+ -with-icu=* | --with-icu=* )
+ flag_icu=yes
+ ICU_ROOT=`expr "x$option" : "x-*with-icu=\(.*\)"`
+ ;;
+
+ -without-icu | --without-icu )
+ flag_icu=no
+ ;;
+
+ -with-libraries=* | --with-libraries=* )
+ library_list=`expr "x$option" : "x-*with-libraries=\(.*\)"`
+ if test "$library_list" != "all"; then
+ old_IFS=$IFS
+ IFS=,
+ for library in $library_list
+ do
+ LIBS="$LIBS --with-$library"
+
+ if test $library = python; then
+ requested_python=yes
+ fi
+ done
+ IFS=$old_IFS
+
+ if test "x$requested_python" != xyes; then
+ flag_no_python=yes
+ fi
+ fi
+ ;;
+
+ -without-libraries=* | --without-libraries=* )
+ library_list=`expr "x$option" : "x-*without-libraries=\(.*\)"`
+ old_IFS=$IFS
+ IFS=,
+ for library in $library_list
+ do
+ LIBS="$LIBS --without-$library"
+
+ if test $library = python; then
+ flag_no_python=yes
+ fi
+ done
+ IFS=$old_IFS
+ ;;
+
+ -with-python=* | --with-python=* )
+ PYTHON=`expr "x$option" : "x-*with-python=\(.*\)"`
+ ;;
+
+ -with-python-root=* | --with-python-root=* )
+ PYTHON_ROOT=`expr "x$option" : "x-*with-python-root=\(.*\)"`
+ ;;
+
+ -with-python-version=* | --with-python-version=* )
+ PYTHON_VERSION=`expr "x$option" : "x-*with-python-version=\(.*\)"`
+ ;;
+
+ -with-toolset=* | --with-toolset=* )
+ TOOLSET=`expr "x$option" : "x-*with-toolset=\(.*\)"`
+ ;;
+
+ -*)
+ { echo "error: unrecognized option: $option
+Try \`$0 --help' for more information." >&2
+ { (exit 1); exit 1; }; }
+ ;;
+
+ esac
+done
+
+if test "x$want_help" = xyes; then
+ cat <<EOF
+\`./bootstrap.sh' prepares Boost for building on a few kinds of systems.
+
+Usage: $0 [OPTION]...
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --with-bjam=BJAM use existing Boost.Jam executable (bjam)
+ [automatically built]
+ --with-toolset=TOOLSET use specific Boost.Build toolset
+ [automatically detected]
+ --show-libraries show the set of libraries that require build
+ and installation steps (i.e., those libraries
+ that can be used with --with-libraries or
+ --without-libraries), then exit
+ --with-libraries=list build only a particular set of libraries,
+ describing using either a comma-separated list of
+ library names or "all"
+ [all]
+ --without-libraries=list build all libraries except the ones listed []
+ --with-icu enable Unicode/ICU support in Regex
+ [automatically detected]
+ --without-icu disable Unicode/ICU support in Regex
+ --with-icu=DIR specify the root of the ICU library installation
+ and enable Unicode/ICU support in Regex
+ [automatically detected]
+ --with-python=PYTHON specify the Python executable [python]
+ --with-python-root=DIR specify the root of the Python installation
+ [automatically detected]
+ --with-python-version=X.Y specify the Python version as X.Y
+ [automatically detected]
+
+Installation directories:
+ --prefix=PREFIX install Boost into the given PREFIX
+ [/usr/local]
+ --exec-prefix=EPREFIX install Boost binaries into the given EPREFIX
+ [PREFIX]
+
+More precise control over installation directories:
+ --libdir=DIR install libraries here [EPREFIX/lib]
+ --includedir=DIR install headers here [PREFIX/include]
+
+EOF
+fi
+test -n "$want_help" && exit 0
+
+# TBD: Determine where the script is located
+my_dir="."
+
+# Determine the toolset, if not already decided
+if test "x$TOOLSET" = x; then
+ guessed_toolset=`$my_dir/tools/build/v2/engine/build.sh --guess-toolset`
+ case $guessed_toolset in
+ acc | darwin | gcc | como | mipspro | pathscale | pgi | qcc | vacpp )
+ TOOLSET=$guessed_toolset
+ ;;
+
+ intel-* )
+ TOOLSET=intel
+ ;;
+
+ mingw )
+ TOOLSET=gcc
+ ;;
+
+ sun* )
+ TOOLSET=sun
+ ;;
+
+ * )
+ # Not supported by Boost.Build
+ ;;
+ esac
+fi
+
+rm -f config.log
+
+# Build bjam
+if test "x$BJAM" = x; then
+ echo -n "Building Boost.Build engine with toolset $TOOLSET... "
+ pwd=`pwd`
+ (cd "$my_dir/tools/build/v2/engine" && ./build.sh "$TOOLSET") > bootstrap.log 2>&1
+ if [ $? -ne 0 ]; then
+ echo
+ echo "Failed to build Boost.Build build engine"
+ echo "Consult 'bootstrap.log' for more details"
+ exit 1
+ fi
+ cd "$pwd"
+ arch=`cd $my_dir/tools/build/v2/engine && ./bootstrap/jam0 -d0 -f build.jam --toolset=$TOOLSET --toolset-root= --show-locate-target && cd ..`
+ BJAM="$my_dir/tools/build/v2/engine/$arch/b2"
+ echo "tools/build/v2/engine/$arch/b2"
+ cp "$BJAM" .
+ cp "$my_dir/tools/build/v2/engine/$arch/bjam" .
+
+fi
+
+# TBD: Turn BJAM into an absolute path
+
+# If there is a list of libraries
+if test "x$flag_show_libraries" = xyes; then
+ cat <<EOF
+
+The following Boost libraries have portions that require a separate build
+and installation step. Any library not listed here can be used by including
+the headers only.
+
+The Boost libraries requiring separate building and installation are:
+EOF
+ $BJAM -d0 --show-libraries | grep '^[[:space:]]*-'
+ exit 0
+fi
+
+# Setup paths
+if test "x$EPREFIX" = x; then
+ EPREFIX="$PREFIX"
+fi
+
+if test "x$LIBDIR" = x; then
+ LIBDIR="$EPREFIX/lib"
+fi
+
+if test "x$INCLUDEDIR" = x; then
+ INCLUDEDIR="$PREFIX/include"
+fi
+
+# Find Python
+if test "x$flag_no_python" = x; then
+ result=`$PYTHON -c "exit" > /dev/null 2>&1`
+ if [ "$?" -ne "0" ]; then
+ flag_no_python=yes
+ fi
+fi
+
+if test "x$flag_no_python" = x; then
+ if test "x$PYTHON_VERSION" = x; then
+ echo -n "Detecting Python version... "
+ PYTHON_VERSION=`$PYTHON -c "import sys; print (\"%d.%d\" % (sys.version_info[0], sys.version_info[1]))"`
+ echo $PYTHON_VERSION
+ fi
+
+ if test "x$PYTHON_ROOT" = x; then
+ echo -n "Detecting Python root... "
+ PYTHON_ROOT=`$PYTHON -c "import sys; print(sys.prefix)"`
+ echo $PYTHON_ROOT
+ fi
+fi
+
+# Configure ICU
+echo -n "Unicode/ICU support for Boost.Regex?... "
+if test "x$flag_icu" != xno; then
+ if test "x$ICU_ROOT" = x; then
+ COMMON_ICU_PATHS="/usr /usr/local /sw"
+ for p in $COMMON_ICU_PATHS; do
+ if test -r $p/include/unicode/utypes.h; then
+ ICU_ROOT=$p
+ fi
+ done
+
+ if test "x$ICU_ROOT" = x; then
+ echo "not found."
+ else
+ BJAM_CONFIG="$BJAM_CONFIG -sICU_PATH=$ICU_ROOT"
+ echo "$ICU_ROOT"
+ fi
+ else
+ BJAM_CONFIG="$BJAM_CONFIG -sICU_PATH=$ICU_ROOT"
+ echo "$ICU_ROOT"
+ fi
+else
+ echo "disabled."
+fi
+
+# Backup the user's existing project-config.jam
+JAM_CONFIG_OUT="project-config.jam"
+if test -r "project-config.jam"; then
+ counter=1
+
+ while test -r "project-config.jam.$counter"; do
+ counter=`expr $counter + 1`
+ done
+
+ echo "Backing up existing Boost.Build configuration in project-config.jam.$counter"
+ mv "project-config.jam" "project-config.jam.$counter"
+fi
+
+# Generate user-config.jam
+echo "Generating Boost.Build configuration in project-config.jam..."
+cat > project-config.jam <<EOF
+# Boost.Build Configuration
+# Automatically generated by bootstrap.sh
+
+import option ;
+import feature ;
+
+# Compiler configuration. This definition will be used unless
+# you already have defined some toolsets in your user-config.jam
+# file.
+if ! $TOOLSET in [ feature.values <toolset> ]
+{
+ using $TOOLSET ;
+}
+
+project : default-build <toolset>$TOOLSET ;
+EOF
+
+# - Python configuration
+if test "x$flag_no_python" = x; then
+ cat >> project-config.jam <<EOF
+
+# Python configuration
+using python : $PYTHON_VERSION : $PYTHON_ROOT ;
+EOF
+fi
+
+if test "x$ICU_ROOT" != x; then
+ cat >> project-config.jam << EOF
+
+path-constant ICU_PATH : $ICU_ROOT ;
+
+EOF
+fi
+
+cat >> project-config.jam << EOF
+
+# List of --with-<library> and --without-<library>
+# options. If left empty, all libraries will be built.
+# Options specified on the command line completely
+# override this variable.
+libraries = $LIBS ;
+
+# These settings are equivivalent to corresponding command-line
+# options.
+option.set prefix : $PREFIX ;
+option.set exec-prefix : $EPREFIX ;
+option.set libdir : $LIBDIR ;
+option.set includedir : $INCLUDEDIR ;
+
+# Stop on first error
+option.set keep-going : false ;
+EOF
+
+cat << EOF
+
+Bootstrapping is done. To build, run:
+
+ ./b2
+
+To adjust configuration, edit 'project-config.jam'.
+Further information:
+
+ - Command line help:
+ ./b2 --help
+
+ - Getting started guide:
+ http://www.boost.org/more/getting_started/unix-variants.html
+
+ - Boost.Build documentation:
+ http://www.boost.org/boost-build2/doc/html/index.html
+
+EOF
\ No newline at end of file

Added: sandbox/contract/index.htm
==============================================================================
--- (empty file)
+++ sandbox/contract/index.htm 2013-02-28 18:24:21 EST (Thu, 28 Feb 2013)
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <meta http-equiv="refresh" content="0; URL=index.html" />
+
+ <title></title>
+ <link rel="stylesheet" href="doc/src/boostbook.css" type="text/css" />
+</head>
+
+<body>
+ Automatic redirection failed, please go to <a href=
+ "index.html">index.html</a>.
+
+ <div class="copyright-footer">
+ <p>Copyright 2008 Rene Rivera</p>
+
+ <p>Distributed under the Boost Software License, Version 1.0. (See
+ accompanying file LICENSE_1_0.txt or copy
+ at <a href=
+ "http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt>)</p>
+ </div>
+</body>
+</html>

Deleted: sandbox/contract/index.html
==============================================================================
--- sandbox/contract/index.html 2013-02-28 18:24:21 EST (Thu, 28 Feb 2013)
+++ (empty file)
@@ -1,15 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
- <head>
- <meta http-equiv="refresh" content="0; URL=
http://contractpp.svn.sourceforge.net/viewvc/contractpp/releases/contractpp_0_4_1/doc/html/index.html">
- </head>
- <body>
- Automatic redirection failed, click this
- link &nbsp;<hr>
- <p>© Copyright Lorenzo Caminiti, 2008-2012</p>
- <p>Distributed under the Boost Software License, Version 1.0 (see
- accompanying file <a href="LICENSE_1_0.txt">
- LICENSE_1_0.txt</a> or a copy at
- www.boost.org/LICENSE_1_0.txt)</p>
- </body>
-</html>

Deleted: sandbox/contract/logo.png
==============================================================================
Binary file. No diff available.

Added: sandbox/contract/rst.css
==============================================================================
--- (empty file)
+++ sandbox/contract/rst.css 2013-02-28 18:24:21 EST (Thu, 28 Feb 2013)
@@ -0,0 +1,149 @@
+@import url("doc/src/boostbook.css");
+@import url("doc/src/docutils.css");
+/* Copyright David Abrahams 2006. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ */
+
+dl.docutils dt {
+ font-weight: bold }
+
+img.boost-logo {
+ border: none;
+ vertical-align: middle
+}
+
+pre.literal-block span.concept {
+ font-style: italic;
+}
+
+.nav {
+display: inline;
+list-style-type: none;
+}
+
+.prevpage {
+padding-top: -5px;
+text-align: left;
+float: left;
+}
+
+.nextpage {
+padding-top: -20px;
+text-align: right;
+float: right;
+}
+
+div.small {
+ font-size: smaller }
+
+h2 a {
+ font-size: 90%;
+}
+h3 a {
+ font-size: 80%;
+}
+h4 a {
+ font-size: 70%;
+}
+h5 a {
+ font-size: 60%;
+}
+
+dl,table
+{
+ text-align: left;
+ font-size: 10pt;
+ line-height: 1.15;
+}
+
+
+/*=============================================================================
+ Tables
+=============================================================================*/
+
+/* The only clue docutils gives us that tables are logically tables,
+ and not, e.g., footnotes, is that they have border="1". Therefore
+ we're keying off of that. We used to manually patch docutils to
+ add a "table" class to all logical tables, but that proved much too
+ fragile.
+*/
+
+ table[border="1"]
+ {
+ width: 92%;
+ margin-left: 4%;
+ margin-right: 4%;
+ }
+
+ table[border="1"]
+ {
+ padding: 4px;
+ }
+
+ /* Table Cells */
+ table[border="1"] tr td
+ {
+ padding: 0.5em;
+ text-align: left;
+ font-size: 9pt;
+ }
+
+ table[border="1"] tr th
+ {
+ padding: 0.5em 0.5em 0.5em 0.5em;
+ border: 1pt solid white;
+ font-size: 80%;
+ }
+
+ @media screen
+ {
+
+ /* Tables */
+ table[border="1"] tr td
+ {
+ border: 1px solid #DCDCDC;
+ }
+
+ table[border="1"] tr th
+ {
+ background-color: #F0F0F0;
+ border: 1px solid #DCDCDC;
+ }
+
+ pre,
+ .screen
+ {
+ border: 1px solid #DCDCDC;
+ }
+
+ td pre
+ td .screen
+ {
+ border: 0px
+ }
+
+ .sidebar pre
+ {
+ border: 0px
+ }
+
+ }
+
+ pre,
+ .screen
+ {
+ font-size: 9pt;
+ display: block;
+ margin: 1pc 4% 0pc 4%;
+ padding: 0.5pc 0.5pc 0.5pc 0.5pc;
+ }
+
+ /* Program listings in tables don't get borders */
+ td pre,
+ td .screen
+ {
+ margin: 0pc 0pc 0pc 0pc;
+ padding: 0pc 0pc 0pc 0pc;
+ }
+

Deleted: sandbox/contract/screenshot1.png
==============================================================================
Binary file. No diff available.

Deleted: sandbox/contract/screenshot2.png
==============================================================================
Binary file. No diff available.

Deleted: sandbox/contract/screenshot3.png
==============================================================================
Binary file. No diff available.


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk