2
0
mirror of https://github.com/boostorg/build.git synced 2026-02-16 01:12:13 +00:00

Merged from RC_1_28_0

[SVN r13944]
This commit is contained in:
Dave Abrahams
2002-05-16 00:56:42 +00:00
parent e5048086c5
commit 56a7244dd3
44 changed files with 1860 additions and 908 deletions

View File

@@ -62,11 +62,12 @@ above covers most of it.
where the user wants to declare a project-id.
</blockquote>
<h3>Initialization</h3>
<h3><a name="initialization">Initialization</a></h3>
<p>
We check the name used to invoke Jam, and if the name is not the recognized
Boost.Jam invocation we continue with the execution of the builtin <tt>Jambase</tt>.
We check the name used to invoke Jam, and if the name is not the
recognized Boost.Jam invocation (&quot;<code>bjam</code>&quot;) we
continue with the execution of the builtin <tt>Jambase</tt>.
</p>
<p>

View File

@@ -1598,6 +1598,9 @@ rule subvariant-target ( target : subvariant-id build-properties * : toolset var
# Remember the path from the build root to the subvariant directory
gSUBVARIANT_PATH($(subvariant)) = $(subvariant-id) ;
# Add target suppression if <suppress> was in the requirements
local gSUPPRESS_FAKE_TARGETS = [ get-values <suppress> : $(gTARGET_REQUIREMENTS($(target))) ] $(gSUPPRESS_FAKE_TARGETS) ;
declare-fake-targets $(target) : $(target-files) ;
# set up gBUILD_PROPERTIES for include-tools (below)
@@ -1642,7 +1645,7 @@ rule subvariant-target ( target : subvariant-id build-properties * : toolset var
depend-on-libraries $(target-files) : $(libs) ;
depend-on-dlls $(target-files) : $(dlls) ;
}
# dispatch to the appropriate declaration function. Here we are using an
# FTJam-only feature (thanks, David Turner!)
local ignored = [ $(gGENERATOR_FUNCTION($(target-type))) $(target-files)
@@ -1783,6 +1786,9 @@ rule unit-test
# Used to build command files from a list of sources.
rule build-command-file ( command : sources * )
{
# Clean up after ourselves
Clean clean : $(command) ;
DEPENDS $(command) : $(sources) ;
# Check whether there's anything to dump, so that we don't end up

View File

@@ -16,7 +16,7 @@
<h2><a name="synopsis">Synopsis</a></h2>
<p>Boost.Build is a system for large project software construction built on
Boost Jam, a descendant of &quot;<a
Boost.Jam, a descendant of &quot;<a
href="http://www.perforce.com/jam/jam.html">Perforce Jam</a>&quot;, an
open-source make replacement<a href="#1">[1]</a>. Key features are:
@@ -41,6 +41,19 @@
<li>Automatic building of subproject dependencies
</ul>
<h2><a name="status">Status</a></h2>
Boost.Build v1 is a useful, mature system. However, its design and
structure are not easily adapted to support some of the features
we'd like to see in the future. To this end, the Boost.Build
developers have begun work on v2 of Boost.Build, which will be
based around this
<a href="architecture.html">design document</a>. If you are
interested in contributing to this effort or you wish to discuss
the design of Boost.Build, please post inquiries to the <a
href="http://groups.yahoo.com/group/jamboost/">jamboost</a>
mailing list at yahoogroups.
<p><a href="#design_criteria">Here</a> are some of the design criteria that
led to these features.
@@ -49,11 +62,13 @@
<ul>
<li><a href="#synopsis">Synopsis</a>
<li><a href="#status">Status</a>
<li>
<a href="#getting_started">Getting Started</a>
<ul>
<li><a href="#installing_jam">Installing Jam</a>
<li><a href="#installing_jam">Installing Boost.Jam</a>
<li><a href="#initiating">Initiating a Build</a>
@@ -128,7 +143,7 @@
<ul>
<li><a href="#variable_quoting">Command-line and Environment Variable Quoting</a>
<li><a href="#jambase_replacement">Jambase Replacement</a>
<li><a href="#jambase_replacement">Startup Behavior</a>
<li><a href="#rule_indirection">Rule Indirection</a>
<li><a href="#argument_lists">Argument Lists</a>
@@ -137,7 +152,7 @@
<ul>
<li><a href="#module_declaration">Declaration</a>
<li><a href="#module_locals">Local Variables</a>
<li><a href="#module_locals">Variable Scope</a>
<li><a href="#local_rules">Local Rules</a>
<li><a href="#RULENAMES_rule">The <tt>RULENAMES</tt> rule</a>
<li><a href="#IMPORT_rule">The <tt>IMPORT</tt> rule</a>
@@ -146,11 +161,11 @@
</ul>
<li><a href="#local_foreach">Local for Loop Variables</a>
<li><a href="#while_loops">While Loops</a>
<li><a href="#negative_indexing">Negative Indexing</a>
<li><a href="#BINDRULE">Target Binding Detection</a>
<li><a href="#FAIL_EXPECTED">Return Code Inversion</a>
<li><a href="#NOCARE">Ignoring Return Codes</a>
<li><a href="#RMOLD">Removing outdated targets</a>
<li><a href="#SUBST_rule">The <tt>SUBST</tt> Rule</a>
<li><a href="#JAM_VERSION">The <tt>JAM_VERSION</tt> global variable</a>
<li>
@@ -183,40 +198,26 @@
<h2><a name="getting_started">Getting Started</a></h2>
<h3><a name="installing_jam">Installing Boost Jam</a></h3>
<ul>
<li>The Boost Jam sources are located in the <tt>tools/build/jam_src</tt>
subdirectory of the Boost installation.
<li>The <a href="http://public.perforce.com/public/jam/src/README">Jam
README</a> contains basic installation instructions.
<li>If you are installing on Windows, the make process may prompt you to set
some environment variables, and stop. Don't be alarmed; just follow the
instructions and start over. Please keep in mind that these variable settings
are case-sensitive. The variable settings necessary for bootstrapping
Jam are not needed once it has been built.
<li>Note that the supplied Makefile may require editing for your
platform; see the <a href=
"http://public.perforce.com/public/jam/src/README">Jam README</a> for
details. The Makefile is used for bootstrapping Jam; it builds Jam into a
subdirectory called <tt>bin.</tt><i>platform</i>.
</ul>
<h3><a name="installing_jam">Installing Boost.Jam</a></h3>
Follow these <a href="index.html#Jam">instructions</a> to acquire
a bjam executable for your platform. Install it somewhere in your
path.
<h3><a name="initiating">Initiating a Build</a></h3>
<p>The easiest way to get going is to set the <tt>BOOST_ROOT</tt>
environment variable to point at the Boost installation directory, though
you can also set <tt>BOOST_ROOT</tt> on the command-line, using
<tt>-s...</tt>. You can use the <tt>TOOLS</tt> variable to indicate which
toolset(s) to build with, and the <tt>BUILD</tt> variable to describe how
you want things built. In most cases it should be sufficient to invoke Jam
with no variable settings. The following examples all assume that
<tt>BOOST_ROOT</tt> has been set in the environment.
<p>Boost.Build responds to several global variable settins. The
easiest way to get going is usually to use environment variables,
though you can also set them on the command-line, using
<tt>-s</tt><i>VARIABLE_NAME</i><tt>=</tt><i>value</i>. In
addition to the <a href="index.html#Configuring">toolset
configuration variables</a>, you can use the <tt>TOOLS</tt>
variable to indicate which toolset(s) to build with, and the
<tt>BUILD</tt> variable to describe how you want things built. In
many cases it should be sufficient to invoke <code>bjam</code>
with no variable settings.
<p>Here are some sample Boost Jam invocations:
<p>Some example Boost.Jam invocations:
<table border="1" summary="Sample Jam Invocations=">
<tr>
@@ -227,7 +228,7 @@
<tr>
<td>
<pre>
jam -sTOOLS=gcc my_target
bjam -sTOOLS=gcc my_target
</pre>
<td>default (debug) <tt><a href="#build">BUILD</a></tt> of
@@ -235,7 +236,7 @@ jam -sTOOLS=gcc my_target
<tr>
<td>
<pre>jam -f<i>allyourbase-path</i> -sTOOLS=&quot;msvc gcc&quot;</pre>
<pre>bjam -sTOOLS=&quot;msvc gcc&quot;</pre>
<td>default-build <tt>all</tt> with msvc and gcc
@@ -243,7 +244,7 @@ jam -sTOOLS=gcc my_target
<td>
<pre>
set TOOLS=msvc
jam
bjam
</pre>
<td>Set an NT environment variable to always build with MSVC<br>
@@ -252,15 +253,16 @@ jam
<tr>
<td>
<pre>
jam -sBUILD=release
bjam &quot;-sBUILD=release &lt;debug-symbols&gt;on&quot;
</pre>
<td>release build <tt>all</tt> with default <tt><a href=
"#tools">TOOLS</a></tt>:<br>
<td>release build with debug symbols of <tt>all</tt> using
default <tt><a href=
"#tools">TOOLS</a></tt>
<tr>
<td><pre>jam -sBUILD=&quot;debug release&quot;</pre>
<td><pre>bjam -sBUILD=&quot;debug release&quot;</pre>
<td>debug and release build <tt>all</tt>.
</table>
@@ -277,7 +279,7 @@ jam -sBUILD=release
<blockquote><pre>
&gt; <a href="#build">BUILD</a>=&quot;debug release&quot; <i># assuming Unix</i>
&gt; export <a href="#build">BUILD</a>
&gt; jam ...
&gt; bjam ...
</pre></blockquote>
This approach can be OK for quick-and-dirty tests, but environment variable
settings tend to be unstable and non-uniform across users and machines, so
@@ -659,7 +661,7 @@ exe my_target : my_source1.cpp my_source2.c ;
<td rowspan="2">Platform-dependent
<td><tt>-sTOOLS="gcc msvc"</tt>
<td><tt>&quot;-sTOOLS=gcc msvc&quot;</tt>
<td>build with gcc and msvc
<tr>
@@ -679,18 +681,18 @@ exe my_target : my_source1.cpp my_source2.c ;
<td>build the <tt>release</tt> variant
<tr>
<td><tt>-sBUILD="debug release"</tt>
<td><tt>&quot;-sBUILD=debug release&quot;</tt>
<td>build both <tt>debug</tt> and <tt>release</tt> variants
<tr>
<td><tt>-sBUILD="&lt;optimization&gt;speed"</tt>
<td><tt>&quot;-sBUILD=&lt;optimization&gt;speed&quot;</tt>
<td>build a subvariant of the default variant (<tt>debug</tt>) with
optimization for speed.
<tr>
<td><tt>-sBUILD="debug release &lt;runtime-link&gt;static/dynamic"</tt>
<td><tt>&quot;-sBUILD=debug release &lt;runtime-link&gt;static/dynamic&quot;</tt>
<td>build subvariants of the debug and release variants that link to
@@ -1361,60 +1363,38 @@ jam -sMSVCNT=&quot;\&quot;\&quot;C:\Program Files\Microsoft Visual C++\VC98\&quo
set MSVCNT=&quot;&quot;C:\Program Files\Microsoft Visual C++\VC98\&quot;&quot;
</pre></blockquote>
<h4><a name="jambase_replacement">Jambase Replacement</a></h4>
<h4><a name="jambase_replacement">Startup Behavior</a></h4>
<p>New logic has been added to allow the built-in Jambase to be replaced
without recompiling Jam or adding command-line arguments. The user can
control the location of the build system by setting any of the <tt>JAMBASE</tt>,
<tt>BOOST_ROOT</tt>, or <tt>BOOST_BUILD_PATH</tt> environment variables (the settings of
these variables can also be overridden on the command-line using the
<tt>-s<i>VARIABLE</i>=</tt>... option).
<p>The process is controlled by variables (in decreasing
precedence):
<ul>
<li>If <tt>JAMBASE</tt> is set, it specifies the path to the Jambase
replacement. Non-rooted paths are computed relative to the directory of
Jam's invocation.
<li>Otherwise, if <tt>BOOST_BUILD_PATH</tt> or <tt>BOOST_ROOT</tt> is set,
the build system filename is <tt><b>boost-build.jam</b></tt>.
<li>If the build system filename does not contain a path specification,
the build system file is searched for on <tt>$(BOOST_BUILD_PATH)</tt>,
then at <tt>$(BOOST_ROOT)/tools/build</tt>.
<li>If <tt>BOOST_BUILD_PATH</tt> was not set, it will be set to
<tt>$(BOOST_ROOT)/tools/build</tt>.
<li>If neither <tt>JAMBASE</tt>, <tt>BOOST_ROOT</tt>, nor
<tt>BOOST_BUILD_PATH</tt> is set, we use the built-in Jambase (nearly
identical to the <a
href="http://freetype.sourceforge.net/jam/index.html">FTJam</a> Jambase)
and load the user's Jamfile. Perforce Jam has this behavior, and it is
used for building Jam itself. <b>Thus, when you rebuild Jam, these
variables should be unset</b>.
</ul>
<p>The rationale for this behavior is as follows:
<ul>
<li> The Jam executable should allow the Jambase to be overridden to
implement other build systems without the user having any knowledge
of Boost, thus the <tt>JAMBASE</tt> variable.
<li> <tt>BOOST_BUILD_PATH</tt> is designed to be used to find all <a
href="#module_support">modules</a> used by the build system, so that users
and system administrators may non-intrusively add modules to the system.
<li> Many Boost users already have <tt>BOOST_ROOT</tt> set. If a user
doesn't want to explicitly set up <tt>BOOST_BUILD_PATH</tt>,
<tt>BOOST_ROOT</tt> will supply reasonable behavior.
</ul>
<p>The Boost.Build v2 initialization behavior has been
implemented. This behavior only applies when the executable
being invoked is called &quot;<code>bjam</code>&quot; or, for
backward-compatibility, when the <code>BOOST_ROOT</code>
variable is set.
<ol>
<li> We attempt to load "boost-build.jam" by searching from the
current invocation directory up to the root of the
file-system. This file is expected to invoke the
<tt>boost-build</tt> rule to indicate where the Boost.Build
system files are, and to load them.
<li> If boost-build.jam is not found we error and exit, giving
brief instructions on possible errors.
<blockquote>
As a backward-compatibility measure for older versions of Boost.Build,
when the <code>BOOST_ROOT</code> variable is set, we first search for
<code>boost-build.jam</code> in <code>$(BOOST_ROOT)/tools/build</code>
and <code>$(BOOST_BUILD_PATH)</code>. If found, it is loaded and
initialization is complete.
</blockquote>
<li> The <code>boost-build</code> rule adds its (optional) argument
to the front of <code>BOOST_BUILD_PATH</code>, and attempts to
load <code>bootstrap.jam</code> from those directories. If a
relative path is specified as an argument, it is treated as
though it was relative to the <code>boost-build.jam</code>
file.
<li> If the bootstrap.jam file was not found, we print a likely
error message and exit.
</ol>
<h4><a name="rule_indirection">Rule Indirection</a></h4>
@@ -1573,67 +1553,62 @@ module your_module
<p>
<h5><a name="module_locals">Local Variables</a></h5>
<tt>module local </tt> <i>expression</i><tt> ;</tt><br>
<i>- or -</i><br>
<tt>module local </tt> <i>expression</i><tt> = </tt>
<i>expression2</i><tt> ;</tt>
<h5><a name="module_locals">Variable Scope</a></h5>
<p>The variables named by <i>expression</i> are given a distinct value
in the module, and can be manipulated by code executing in the module
without affecting variable bindings seen by other modules. If the
assignment form is used, <i>expression2</i> is assigned to the
variables when the declaration is executed. For example:
<blockquote>
<p>Each module has its own set of dynamically nested variable
scopes. When execution passes from module A to module B, all
the variable bindings from A become unavailable, and are
replaced by the bindings that belong to B. This applies
equally to local and global variables:
<pre>
module M {
<b>module local</b> x = a b c ;
rule f ( )
{
<blockquote>
module A
{
x = 1 ;
rule f ( )
{
local x = 1 2 3 ; # temp override for M's x
N.g ; # call into module N, below
local y = 999 ; # becomes visible again when B.f calls A.g
B.f ;
}
rule g ( )
{
ECHO $(y) ; # prints &quot;999&quot;
}
ECHO $(x) ; # prints "a b c"
}
}
module N {
rule g ( )
{
x = foo bar baz ; # sets global x
M.h ; # call back into M, below
}
module B
{
y = 2 ;
rule f ( )
{
ECHO $(y) ; # always prints &quot;2&quot;
A.g ;
}
}
module M {
rule h ( )
{
ECHO $(x) ; # prints "1 2 3"
}
}
M.f ;
ECHO $(x) ; # prints "foo bar baz"
</blockquote>
</pre>
</blockquote>
The only way to access another module's local variables is through a
rule defined in that module:
The only way to access another module's variables is by
entering that module:
<blockquote>
<pre>
module M {
rule get ( names * )
{
return $($(names)) ;
}
rule peek ( module-name ? : variables + )
{
module $(module-name)
{
return $($(&gt;)) ;
}
}
ECHO [ <b>M.get</b> x ] ; # prints "a b c"
</pre>
</blockquote>
Note that because existing variable bindings change whenever a
new module scope is entered, argument bindings become
unavailable. That explains the use of
&quot;<code>$(&gt;)</code>&quot; in the <code>peek</code> rule
above.
<h5><a name="local_rules">Local Rules</a></h5>
<blockquote>
@@ -1757,36 +1732,6 @@ for <b>local</b> y in $(x)
ECHO $(y) ; # prints &quot;1&quot;, &quot;2&quot;, or &quot;3&quot;
}
ECHO $(y) ; # prints &quot;4 5 6&quot;
</pre></blockquote>
<h4><a name="while_loops">While Loops</a></h4>
In classic Jam, some constructs are only possible using recursion:
<blockquote><pre>
# returns the part of $(list) following the first occurrence of $(symbol)
rule after-symbol ( symbol : list * )
{
if ! $(list) || ( $(symbol) = $(list[1]) )
{
return $(list[2-]) ;
}
else
{
return [ after-symbol $(symbol) : $(list[2-]) ] ;
}
}
</pre></blockquote>
The addition of <tt>while</tt> loops allows a simpler formulation for this and
many other rules:
<blockquote><pre>
rule after-symbol ( symbol : list * )
{
while $(list) &amp;&amp; $(list[1]) != $(symbol)
{
list = $(list[2-]) ;
}
return $(list) ;
}
</pre></blockquote>
<h4><a name="negative_indexing">Negative Indexing</a></h4>
@@ -1852,8 +1797,27 @@ rule bind-rule ( target : path )
should be built anyway. Boost Jam extends <tt>NOCARE</tt> to apply to
targets with build actions: if their build actions exit with a nonzero
return code, dependent targets will still be built.
<h4><a name="RMOLD">Removing Outdated Targets</a></h4>
<blockquote>
<pre>
rule RMOLD ( targets * )
</pre>
</blockquote>
<p>Perforce Jam removes any target files that may exist on disk
when the rule used to build those targets fails. However,
targets whose dependencies fail to build are not removed by
default. The <code>RMOLD</code> rule causes its arguments to be
removed if any of their dependencies fail to build.
<h4><a name="SUBST_rule">The <tt>SUBST</tt> Rule</a></h4>
<p><b>Note:</b> the <code>SUBST</code> rule is deprecated in favor
of Perforce Jam's built-in <cdoe>MATCH</cdoe> rule, which has been
rolled into Boost.Jam.
<p>The behavior of the <tt>SUBST</tt> rule for regular-expression matching
and replacement (originally added in <a href=
"http://freetype.sourceforge.net/jam/index.html">FTJam</a>) has been
@@ -1996,6 +1960,9 @@ rule BACKTRACE ( )
&quot;change&quot; a global variable by declaring a <tt>local</tt> of the
same name.
<p>Many of the variables that are used to configure how Boost.Build works
internally are listed <a href="variables.html">here</a> with brief descriptions.
<h3>Variables Associated with SubProject Identity</h3>
<ul>

View File

@@ -9,6 +9,7 @@ feature profiling : off on ;
feature struct-alignment : auto 1 2 4 8 16 ;
feature eh-model : default fast msvc ; # metrowerks only
feature vtable-thunks : default on off ; # gcc only
feature threading : single multi ;
@@ -67,6 +68,7 @@ gTARGET_TYPE_REQUIREMENTS(DLL) = <shared-linkable>true ;
##### Variant definitions ####
COMMON_PROPERTIES ?=
<vtable-thunks>default
<struct-alignment>auto
<eh-model>default
<threading>single

234
gcc-nocygwin-tools.html Normal file
View File

@@ -0,0 +1,234 @@
<html>
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="boost.css">
<title>Boost.Build - gcc-nocygwin toolset</title>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
"header">
<tr>
<td valign="top" width="300">
<h3><a href="http://www.boost.org"><img height="86" width="277" alt="C++ Boost" src="../../c++boost.gif" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center">Boost.Build</h1>
<h2 align="center">gcc-nocygwin toolset</h2>
</td>
</tr>
</table>
<hr>
<h2>Introduction</h2>
<p>
This page describes the gcc-nocygwin toolset, which builds Boost using
the -mno-cygwin option of the Cygwin gcc compiler. This avoids
introducing dependencies on the Cygwin Unix-emulation layer, allowing
you to build Windows executables which are not dependant on
cygwin1.dll.
</p>
<p>
You could achieve the same results by using the MinGW version of gcc,
but the Cygwin compiler has two advantages:
<ol>
<li>It can build for both environments - Unix emulation and Windows
native - with one compiler.
<li>You can use the latest versions of GCC. The latest released
version of MinGW GCC is 2.95.3, and building MinGW-specific versions
of GCC 3.0.x has proven to be quite difficult. However, it's
straightforward under Cygwin. Just be sure to configure with
<code>--enable-languages=c,c++</code> to disable other languages which
fail to build properly.
</ol>
</p>
<h2><a name="configuration">Configuration Variables</a></h2>
<p>
The gcc toolset responds to the variables shown in the following table,
which can be set in the environment or configured on the jam
command-line using <code>-s<i>VARIABLE_NAME</i>=</code><i>value</i>.
</p>
<p>
This toolset is an extension to the gcc-stlport toolset and therefore
also responds to all of the configuration variables for
<a href="gcc-stlport-tools.html#configuration">gcc-stlport</a>
and
<a href="gcc-tools.html#configuration">gcc</a>
in addition to those listed below.
</p>
<table border="1">
<tr>
<th>Variable Name</th>
<th>Semantics</th>
<th>Default</th>
<th>Notes</th>
</tr>
<tr>
<td>
<code>NOCYGWIN_<br>STLPORT_<br>LIB_ID</code>
</td>
<td>
The name used to generate the stlport library names (corresponding
to the LIB_BASENAME variable in the STLport make files).
</td>
<td>
mingw32
</td>
<td>
This forms the middle part of the STLport library
names, for example libstlport_<b>mingw32</b>_debug.a
</td>
</tr>
</table>
<h2>Prerequisites</h2>
<p>
Obviously, you'll need Cygwin installed on your Windows
system. Earlier releases of Cygwin came as monolithic packages, but
this switched to individually selectable components around 2000. If
you've got a recent installation, you'll have to make sure you've got
the optional mingw-runtime package installed. Have a look in
/lib/mingw to see if things like libmingw32.a and libcrtdll.a are
present, and that the directory /usr/include/mingw includes the
standard headers stdio.h etc. Install the additional package if
necessary.
</p>
<p>
You will also need the STLport standard library installed and fully
compiled (i.e. using its own iostreams) without any Cygwin
dependencies. This would be very easy if you had the real mingw
compiler installed, because the STLport distribution includes a
ready-made makefile for this, called gcc-mingw.mak. Making this work
with the Cygwin compiler requires a couple of changes to the file (see
<a href="#stlport">below</a> for details). Sooner or later there may
be a specific nocygwin makefile for STLport which will make this
easier.
</p>
<p>
Finally, you will need a Boost jam executable that was built for
Windows (aka NT). The Cygwin-built Boost jam is <b>not</b> suitable,
primarily because it executes commands via the Cygwin shell, which
doesn't handle backslashes in Windows pathnames. Until there is a
specific nocygwin makefile for Boost jam, it is probably best to
download the prebuilt executable for Windows.
</p>
<h2>Building with gcc-nocygwin</h2>
<p>
Refer to the <a
href="gcc-stlport-tools.html#configuration">gcc-stlport</a>
configuration section for details of the <code>STLPORT_ROOT</code>
variable, which you'll have to configure (at the very least). Make
sure to use Windows-style pathnames and not the /cygdrive/x/... style
(you're using the Windows native Boost jam, remember).
</p>
<p>
Configure additional variables as described <a
href="../../libs/python/doc/building.html">here</a> if you want to
build the <a href="../../libs/python/doc/index.html">Boost.Python</a>
library, making sure to point it at a <b>Windows</b> installation of
Python and not a Cygwin one. At the time of writing, the Python
example simple_vector.cpp fails to compile in debug mode
because of an incompatability with the STLport debugging STL
containers, but everything else should build properly.
</p>
<p>
If your STLport libraries don't have names like stlport_mingw32&#8230;
you will need to set the environment variable
<code>NOCYGWIN_STLPORT_LIB_ID</code> to replace the "mingw32" part of
the library names.
</p>
<p>
Once your environment is right, you can
<a href="build_system.htm#initiating">start</a> the build as for any other
toolset, using the toolset name "gcc-nocygwin". If you want to
see exactly what's going on, try supplying jam the <code>-d2</code>
option to show the raw commands as they execute.
</p>
<p>
If you work with COM or DirectX, you will want to force gcc to
generate vtable-thunks by including <code>&lt;vtable-thunks&gt;on</code>
in the BUILD <a href="build_system.htm#user_globals">global
variable</a>. If you're messing around with this stuff, make extra sure
that you build all your libraries (including STLport) with the same
vtable style.
<h2>Boost threads library and gcc 2.95.3-5</h2>
<p>
The Cygwin-special gcc release 2.95.3-5 does not include a thread-safe
version of libgcc.a, which prevents any of it's code being
thread-safe, even with the -mthreads option. If you're feeling lucky,
grafting in the thread-safe versions of _eh.o and frame.o from the
mingw 2.95.3 libgcc.a seems to fix the problem (give the hybrid
library a new name and adjust the compiler's specs file
appropriately). Later releases of the Cygwin compiler probably won't
suffer from this restriction, so you should definitely upgrade if you
want to use the threads library.
</p>
<a name="stlport"></a>
<h2>Building a native STLport with Cygwin gcc</h2>
<p>
The current release (4.5.3) of STLport does not include an extra
makefile to build the libraries with the -mno-cygwin mode of Cygwin
gcc, but you can use the existing <code>gcc-mingw.mak</code> file by
setting the
<code>CXXFLAGS_COMMON</code> variable on your make command line, as follows:
</p>
<pre>
make -fgcc-mingw.mak &quot;CXXFLAGS_COMMON=-mno-cygwin -I/usr/include/mingw&quot;
</pre>
You might also need to add <code>-mthreads</code> and/or
<code>-fvtable-thunks</code> within the quotes, depending on what kind
of executables you ultimately want to produce. You can create multiple
versions of the libraries by setting a different
<code>LIB_BASENAME</code> in each case, and set up a corresponding
value in the
<code>NOCYGWIN_STLPORT_LIB_ID</code> shell variable before building
Boost.
</p>
<p>If you have built a newer version of Cygwin GCC from source, or
you've built an older one and configured it with
<code>--prefix=</code>, you'll need to add the following
<code>DYN_LINK</code> variable setting in order to get the GCC support
libraries into the library search path when the STLPort DLLs are
built:
<pre>
&quot;DYN_LINK=c++ -shared -L/usr/local/lib -o&quot;
</pre>
(substitute the path you passed to <code>--prefix=</code> for
<code>/usr/local/lib</code> if you are using a non-standard
configuration).
<p>
Make sure that you're really compiling the STLport iostreams instead
of just wrapping the Cygwin gcc streams. The default behaviour for
STLport 4.x is correct, but it is possible to reconfigure this
manually. Refer to the documentation on selecting the IOStreams mode
if you're in doubt.
</p>
<p>
<i>
Toolset and docs contributed May 2002 by
<a href="mailto:RaoulGough@yahoo.co.uk">Raoul Gough</a>
</i>
</p>
</body>
</html>

83
gcc-nocygwin-tools.jam Normal file
View File

@@ -0,0 +1,83 @@
# (C) Copyright David Abrahams and Carlos Pinto Coelho 2001, 2002.
# Permission to copy, use, modify, sell and distribute this software
# is granted provided this copyright notice appears in all
# copies. This software is provided "as is" without express or implied
# warranty, and with no claim as to its suitability for any purpose.
#
# gcc-nocygwin toolset by Raoul Gough (RaoulGough@yahoo.co.uk)
#
# This toolset builds boost on a cygwin system using the -mno-cygwin
# gcc option, which creates windows-native binaries (without any
# dependencies on cygwin1.dll). It requires an STLport built
# by mingw gcc, or maybe by cygwin gcc using the -mno-cygwin
# option, if you feel like messing with the STLport makefiles.
#
# Configuration:
#
# You need a boost jam executable that was built for NT, not
# cygwin. There are two reasons for this. Firstly, you need the
# NT jam variable to be set, and secondly, the cygwin build of
# boost jam executes commands via the cygwin shell, which doesn't
# handle backslashes in pathnames properly.
#
# Don't forget to set STLPORT_ROOT, either in your environment
# or in Jamrules in the boost installation directory. Also set
# BOOST_ROOT. Use native windows path names and not the
# /cygdrive/... style.
#
# Set NOCYGWIN_STLPORT_LIB_ID to set the STLport naming
# convention (default is "mingw32" which looks for libraries
# named like stlport_mingw32_stldebug.lib)
#
# Run boost jam from the boost install directory like this:
#
# jam -sTOOLS=gcc-nocygwin
#
# If things are going wrong, a handy jam option is -d2, which shows
# commands before execution.
#
NOCYGWIN_STLPORT_LIB_ID ?= mingw32 ;
{
local GCC_STLPORT_LIB_ID = $(NOCYGWIN_STLPORT_LIB_ID) ;
extends-toolset gcc-stlport ;
}
flags gcc-nocygwin CFLAGS : -mno-cygwin ;
flags gcc-nocygwin LINKFLAGS : -mno-cygwin ;
flags gcc-nocygwin LINKFLAGS <threading>multi : -mthreads ;
#### Link ####
#
# Duplicated from gcc-tools.jam (unfortunately) because we don't want
# IMPLIB_COMMAND to include -Wl,--export-all-symbols
#
rule Link-action
{
SPACE on $(<) = " " ;
# if we don't have a GNU linker then we can't pass any GNU-ld specific flags:
if $(NO_GNU_LN)
{
LNOPT on $(<) = ;
}
else
{
LNOPT on $(<) = "" ;
}
OUTTAG on $(<) = "" ;
SOTAG on $(<) = ;
ACTION_1 on $(<) = ;
# This will appear before the import library name when building a DLL, but
# will be "multiplied away" otherwise.
IMPLIB_COMMAND on $(<) = "-Wl,--exclude-symbols,_bss_end__:_bss_start__:_data_end__:_data_start__ -Wl,--out-implib," ;
DEPENDS $(<) : $(NEEDLIBS) ;
gRUN_LD_LIBRARY_PATH($(<)) += $(GCC_STDLIB_DIRECTORY) ;
gcc-Link-action $(<) : $(>) ;
}

View File

@@ -23,14 +23,16 @@
<p>Boost.Build's <a href="http://gcc.gnu.org">gcc-stlport</a> toolset supports the
GNU GCC compiler using <a href="http://www.stlport.org">STLport</a> as a replacement
to the GNU libg++. This toolset is an extension to the
<a href="gcc-tools.html">gcc toolset</a> and therefore supports the same functionality.
to the GNU libg++.
<h2>Configuration Variables</h2>
<h2><a name="configuration">Configuration Variables</a></h2>
The gcc-stlport toolset responds to the following variables which can be set in the
environment or configured on the jam command-line using
<code>-s<i>VARIABLE_NAME</i>=</code><i>value</i>:
<code>-s<i>VARIABLE_NAME</i>=</code><i>value</i>. This toolset is an extension to the
<a href="gcc-tools.html">gcc toolset</a> and therefore responds to all
of the GCC <a href="gcc-tools.html#configuration">configuration
variables</a> in addition to those listed below.
<table border="1">

View File

@@ -28,9 +28,9 @@ also supports <a href="http://www.cygwin.com">Cygwin</a> GCC, though
<a href="http://www.mingw.org">MinGW</a> has <a
href="mingw-tools.html">its own distinct toolset</a>.
<h2>Configuration Variables</h2>
<h2><a name="configuration">Configuration Variables</a></h2>
The gcc toolset responds to the following variables can be set in the
The gcc toolset responds to the following variables, which can be set in the
environment or configured on the jam command-line using
<code>-s<i>VARIABLE_NAME</i>=</code><i>value</i>:

View File

@@ -168,6 +168,8 @@ flags gcc CFLAGS <profiling>on : -pg ;
flags gcc LINKFLAGS <profiling>on : -pg ;
flags gcc C++FLAGS <rtti>off : -fno-rtti ;
flags gcc C++FLAGS <vtable-thunks>on : -fvtable-thunks ;
flags gcc C++FLAGS <vtable-thunks>off : -fvtable-thunks=0 ;
flags gcc CFLAGS <cflags> ;
flags gcc C++FLAGS <cxxflags> ;

View File

@@ -14,95 +14,107 @@
<img src="../../c++boost.gif" alt="c++boost.gif (8819 bytes)" align= "center" width="277" height="86">Building
Boost Libraries</h1>
<table border="1" cellpadding="5" width="656">
<tr>
<td width="638"><font size="5" color="#FF0000"><b>Read This
First!</b></font> <p>Boost.Build is fairly new as yet.&nbsp; Some features
are missing or incomplete. Instructions for accomplishing basic tasks
(this page) are rudimentary.&nbsp; But enough functionality is working
well to make using Boost.Build worthwhile.&nbsp; The important
bits-and-pieces are all there - what's left is some of the relatively
minor glue to make the system smooth and easy to use. Secondary tasks like
copying libraries to installation specific directories are weak.</p> <p>If
there isn't a configuration file (see <a href="#Tools">Tools</a>) available
for your favorite compiler, consider contributing one. </p> <p>Note
that the underlying Boost.Jam build engine is mature software, and the
original Jam build engine has been
widely used for many years.&nbsp; The Boost specific extensions are well
on their way to becoming stable, and have begun to attract interest and
use outside of Boost.</td>
</tr>
</table>
<p><a href="#Introduction">Introduction</a><br>
<a href="#Preliminaries">Preliminaries</a><br>
<a href="#Building">Building Boost Libraries</a><br>
<a href="#Moretools">More on using the tools</a><br>
<a href="#Tools">Tools available</a><br>
<a href="#Configuring">Configuring the tools</a><br>
<a href="#Tools">Supported Toolsets</a><br>
<a href="#Jam">Boost.Jam executable</a></p>
<h2><a name="Introduction">Introduction</a></h2>
<p>These instructions explain how to accomplish common tasks using <b>Boost.Build</b>,
the Boost Build System.&nbsp; The build system uses <a href="build_system.htm">
Boost.Jam</a>, an extension of the
<a href="http://www.perforce.com/jam/jam.html">Perforce Jam</a> portable <i>make</i>
replacement.</p>
<p>For tasks not covered here, see the full <a href="build_system.htm">build
system documentation</a>.</p>
<p>Note that many Boost libraries are implemented entirely within their headers,
and so can be used without building object libraries.&nbsp; Libraries that do
require building object libraries first include the Boost Python, Regular
Expression, and Thread libraries.</p>
<p>These instructions explain how to accomplish common tasks using
<b>Boost.Build</b>, the Boost Build System. The build system uses <a
href="build_system.htm"> Boost.Jam</a>, an extension of the
<a href="http://www.perforce.com/jam/jam.html">Perforce Jam</a>
portable <i>make</i> replacement.</p>
<p>For tasks not covered here, see the full <a
href="build_system.htm">build system documentation</a>.</p>
<p>Note that many Boost libraries are implemented entirely within
their headers, and so can be used without building object
libraries. Libraries that do require building object libraries first
include the <a href="../../libs/python/doc/index.html">Python</a>, <a
href="../../libs/regex/index.htm">Regex</a>, and <a
href="../../libs/thread/doc/index.html">Threads</a> libraries.
<h2><a name="Preliminaries">Preliminaries</a></h2>
<ul>
<li><a href="../../more/download.html">Download Boost</a>, and unpack the full
directory structure into some root directory.</li>
<li>Install the <a href="#Jam">Boost.Jam executable</a> if needed. <a href="#Jam">
Pre-builts</a> are available. Make sure it's in your path. (Note: Boost
requires an enhanced version of Jam; the basic version won't work.)</li>
<li>Set any environment variables required to run your compiler and related
tools from the command line. (It might be a good idea to verify your command
line compiler is working if you don't use it regularly.) If you don't want
to clutter your environment, see <a href="#Moretools">More on using the
tools</a> for alternatives.</li>
<li><a href="#Configuring">Configure</a> the command-line toolset(s)
you intend to use. It might be a good idea to verify your command
line compiler is working if you don't use it regularly.
<li>Optional: if you intend to build the <a
href="../../libs/python/doc/index.html">Boost.Python</a> library, set
environment variables to configure Boost.Build for your Python
installation. For more information, see these <a
href="../../libs/python/doc/building.html">instructions</a>. If you
leave this step out, Boost.Build will print a message about how to
do it, and will skip the build for Boost.Python.
</ul>
<h2><a name="Building">Building</a> Boost Libraries</h2>
<p>Using your operating system's command line interpreter, execute the following
steps.&nbsp; The sample commands given will work for both UNIX and Windows.</p>
steps. The sample commands given will work for both UNIX and Windows.</p>
<ul>
<li>Change to the Boost root directory.&nbsp; (The directory you unpacked the
<li>Change to the Boost root directory. (The directory you unpacked the
distribution into; unless you changed it, the name will be boost_n_n_n where
n_n_n is the release number.&nbsp; Among others files, it contains c++boost.gif,
and subdirectories boost, libs, more, etc.)</li>
n_n_n is the release number. Among others files, it contains c++boost.gif,
and subdirectories boost, libs, more, etc.)
<blockquote>
<p><code>chdir boost_1_27_0&nbsp; // or whatever release you downloaded</code></p>
<p><code>chdir&nbsp;boost_1_28_0&nbsp;&nbsp;</code> <i>(or whatever release you downloaded)</i>
</blockquote>
<li>Build the Boost libraries for your <a href="#Tools">tools</a>. The example
is for the GNU and Metrowerks compilers.</li>
<li>Invoke the build system, specifying the <a
href="#Tools">toolset</a>(s) you wish to use. The example is for
the GNU and Metrowerks compilers. For more sophisticated jam
invocation options, see this <a
href="build_system.htm#initiating">documentation</a>.
<blockquote>
<p><code>bjam&nbsp;-sTOOLS=&quot;gcc&nbsp;metrowerks&quot;</code></p>
<p><code>bjam&nbsp;&quot;-sTOOLS=gcc&nbsp;metrowerks&quot;</code></p>
</blockquote>
</ul>
<h2><a name="Moretools">More on using the tools</a></h2>
<h2><a name="Configuring">Configuring the tools</a></h2>
<p>The build system's toolsets are designed to work in either of two ways:</p>
<ol>
<li>The user sets up all of the environment for each toolset he wants to use,
in the normal way. For example, for Microsoft VC++, ...vc98/bin is in the
path, vcvars32.bat or equivalent has been invoked, etc. For Metrowerks
CodeWarrior, cwenv.bat or equivalent has been called and ...Other Metrowerks
Tools/Command Line Tools is in the path.<br>
<li>The user sets up all of the environment for each toolset he
wants to use in the normal way. For example, for Microsoft VC++,
...vc98/bin is in the path, vcvars32.bat or equivalent has been
invoked, etc. For Metrowerks CodeWarrior, cwenv.bat or equivalent
has been called and ...Other Metrowerks Tools/Command Line Tools
is in the path. Many Unix operating systems come preconfigured
this way and require no user intervention.<br>
<br>
</li>
<li>The user doesn't want his environment cluttered with this junk and wants
to avoid the many other things done by the vendor's script files. Instead,
he or she sets variables which point to the toolset installation directories
(possibly in the Jamrules, or a user-setup.jam file invoked by the Jamrules).
These variables are used by the build system to locate the tools and invoke
the necessary setup. They are described in the comments in each toolset's
.jam file.</li>
<li>The user doesn't want his environment cluttered with settings or
has non-standard installations for some of his tools. Instead, he
or she sets variables which point to the toolset installation
directories, either in the command shell environment or on the
<code>bjam</code> command-line. These variables are used by the
build system to locate the tools and invoke the necessary
setup.
</ol>
<h2><a name="Tools">Tools</a> available</h2>
<h2><a name="Tools">Supported Toolsets</a></h2>
The following toolsets are supported by Boost.Build. For information
about <a href="#Configuring">configuring</a> each toolset, click its name in the leftmost
column.
<table border="1" cellpadding="5">
<tr>
<td><b>TOOLS Name</b></td>
@@ -110,79 +122,163 @@ steps.&nbsp; The sample commands given will work for both UNIX and Windows.</p>
</tr>
<tr>
<td><code><a href="borland-tools.html">borland</a></code></td>
<td>Borland command line compiler tools</td>
<td><a href="http://www.borland.com/bcppbuilder/freecompiler">Borland</a> C++</td>
</tr>
<tr>
<td><code><a href="como-tools.html">como</a></code></td>
<td>Comeau command line compiler tools</td>
<td><a href="http://www.comeaucomputing.com">Comeau C++</a> compiler front-end for Windows,
using Microsoft <a href="http://msdn.microsoft.com/visualc/">Visual C++</a>as a back-end.</td>
</tr>
<tr>
<td><code><a href="gcc-tools.html">gcc</a></code></td>
<td>GNU GCC command line compiler tools</td>
<td><a href="http://gcc.gnu.org">GNU GCC</a> on Unix and <a href="http://www.cygwin.com">Cygwin</a>.</td>
</tr>
<tr>
<td><code><a href="gcc-stlport-tools.html">gcc-stlport</a></code></td>
<td>GNU GCC command line compiler tools, using the STLport library</td>
<td><a href="http://gcc.gnu.org">GNU GCC</a> on Unix and <a
href="http://www.cygwin.com">Cygwin</a>, using the <a
href="http://www.stlport.org">STLport</a> standard library
implementation</td>
</tr>
<tr>
<td><code>intel-win32</code></td>
<td>Intel command line compiler tools under Win32 using the
Microsoft library</td>
<td><code><a href="gcc-nocygwin-tools.html">gcc-nocygwin</a></code></td>
<td>GNU GCC Cygwin command line compiler tools running in
&quot;no-cygwin&quot; mode, using the <a href="http://www.stlport.org">STLport</a>
standard library implementation (produces commercially redistributable
objects)</td>
</tr>
<tr>
<td><code>intel-linux</code></td>
<td>Intel command line compiler tools under Linux</td>
<td><code><a href="intel-win32-tools.html">intel-win32</a></code></td>
<td><a
href="http://www.intel.com/software/products/compilers/c60/">Intel
C++ for Windows</a> using the Dinkumware standard library in the Intel-required Microsoft
<a href="http://msdn.microsoft.com/visualc/">Visual C++</a> 6 or 7
installation</td>
</tr>
<tr>
<td><code>kcc</code></td>
<td>KAI command line compiler tools</td>
<td><code><a href="intel-linux-tools.html">intel-linux</a></code></td>
<td><a href="http://www.intel.com/software/products/compilers/c60l/">Intel C++ for Linux</a></td>
</tr>
<tr>
<td><code>metrowerks</code></td>
<td>Metrowerks CodeWarrior command line compiler tools</td>
<td><code><a href="kcc-tools.html">kcc</a></code></td>
<td><a href="http://developer.intel.com/software/products/kcc/">KAI C++</a></td>
</tr>
<tr>
<td><code>msvc</code></td>
<td>Microsoft Visual C++ command line compiler tools</td>
<td><code><a href="metrowerks-tools.html">metrowerks</a></code></td>
<td><a href="http://www.metrowerks.com">Metrowerks CodeWarrior</a> command-line tools</td>
</tr>
<tr>
<td><code>msvc-stlport</code></td>
<td>Microsoft Visual C++ command line compiler tools, using the STLport library</td>
<td><code><a href="mingw-tools.html">mingw</a></code></td>
<td>GNU GCC and associated tools in <a
href="http://www.mingw.org">MinGW</a> configuration (produces
commercially redistributable objects)</td>
</tr>
<tr>
<td><code>vacpp</code></td>
<td>IBM Visual Age C++ command line compiler tools</td>
<td><code><a href="mipspro-tools.html">mipspro</a></code></td>
<td>SGI <a href="http://www.sgi.com/developers/devtools/languages/mipspro.html">
MIPSpro C and C++</a></td>
</tr>
<tr>
<td><code><a href="mipspro-tools.html">mipspro</a></code></td>
<td>SGI <a href="http://www.sgi.com/developers/devtools/languages/mipspro.html">
MIPSpro C and C++</a></td>
</tr>
<tr>
<td><code><a href="msvc-tools.html">msvc</a></code></td>
<td>Microsoft <a href="http://msdn.microsoft.com/visualc/">Visual
C++</a> command-line tools.</td>
</tr>
<tr>
<td><code><a href="msvc-stlport-tools.html">msvc-stlport</a></code></td>
<td>Microsoft <a href="http://msdn.microsoft.com/visualc/">Visual
C++</a> command-line tools, using the <a
href="http://www.stlport.org">STLport</a> standard library
implementation</td>
</tr>
<tr>
<td><code><a href="tru64cxx-tools.html">tru64cxx</a></code></td>
<td><a href="http://www.tru64unix.compaq.com/cplus/">Compaq C++</a>
for Tru64 UNIX (versions prior to 6.5)</td>
</tr>
<tr>
<td><code><a href="tru64cxx-tools.html">tru64cxx65</a></code></td>
<td><a href="http://www.tru64unix.compaq.com/cplus/">Compaq C++</a>
Version 6.5 for Tru64 UNIX</td>
</tr>
<tr>
<td><code><a href="vacpp-tools.html">vacpp</a></code></td>
<td><a href="http://www-3.ibm.com/software/ad/vacpp/">IBM Visual
Age C++</a> command-line tools</td>
</tr>
<tr>
<td><code><a href="vc7-tools.html">vc7</a></code></td>
<td>Microsoft <a href="http://msdn.microsoft.com/visualc/">Visual
C++</a> command-line tools, in case you are using the <a
href="msvc-tools.html"><code>msvc</code></a> toolset for a <a
href="http://msdn.microsoft.com/visualc/productinfo/previous/default.asp">Visual
C++ 6.x</a>.</td>
</tr>
</table>
<p>Unless otherwise specified, the library is assumed to be the one shipped with
the compiler.</p>
<p>Additional tools can be supplied by adding an appropriate xxxx-tools.jam file
to the tools/build subdirectory, where xxxx is the name of the tool being
added.&nbsp; If you write an additional toolset file, please submit it to Boost
added. If you write an additional toolset file, please submit it to Boost
so others may benefit from your work.</p>
<h2>Boost.<a name="Jam">Jam</a> executable</h2>
<p>Pre-built Boost.Jam executables are available for the following platforms:</p>
<ul>
<li><a href="http://boost.sourceforge.net/jam-executables/bin.hpux/jam.gz">
<li><a href="http://boost.sourceforge.net/jam-executables/bin.hpux/bjam.gz">
HPUX</a> </li>
<li><a href="http://boost.sourceforge.net/jam-executables/bin.aix/jam.gz">
<li><a href="http://boost.sourceforge.net/jam-executables/bin.aix/bjam.gz">
IBM Aix</a> </li>
<li>
<a href="http://boost.sourceforge.net/jam-executables/bin.linuxx86/jam.gz">
<a href="http://boost.sourceforge.net/jam-executables/bin.linuxx86/bjam.gz">
Linux-x86</a> </li>
<li>
<a href="http://boost.sourceforge.net/jam-executables/boost-build.win.zip">
Microsoft Windows</a> (includes Boost.Build files and boost-build helper
program).</li>
<li><a href="http://boost.sourceforge.net/jam-executables/bin.irix/jam.gz">
<a href="http://boost.sourceforge.net/jam-executables/bin.ntx86/bjam.zip">
Microsoft Windows</a>
<li><a href="http://boost.sourceforge.net/jam-executables/bin.irix/bjam.gz">
SGI Irix</a> </li>
<li>
<a href="http://boost.sourceforge.net/jam-executables/bin.solaris/jam.gz">
<a href="http://boost.sourceforge.net/jam-executables/bin.solaris/bjam.gz">
SUN Solaris</a> </li>
<li>
<a href="http://boost.sourceforge.net/jam-executables/bin.osf/jam.gz">
<a href="http://boost.sourceforge.net/jam-executables/bin.osf/bjam.gz">
Compaq Tru64</a> </li>
<li>
<a href="http://boost.sourceforge.net/jam-executables/bin.linuxppc/bjam.gz">
Linux-PPC</a> </li>
</ul>
<p>RedHat Linux RPM packages are available:</p>
<ul>
@@ -221,11 +317,11 @@ the Boost.Jam executable yourself:</p>
libraries created by the initial make in the <tt>jam_src</tt> directory.
</ul>
<hr>
<p>Revised <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->09 May, 2002<!--webbot bot="Timestamp" i-checksum="40401" endspan -->
<p>Revised <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->15 May, 2002<!--webbot bot="Timestamp" i-checksum="13973" endspan -->
</p>
<p>&copy; Copyright 2001 Beman Dawes</p>
<p>&nbsp;</p>
</body>
</html>
</html>

View File

@@ -21,7 +21,7 @@
<h2>Introduction</h2>
<p>Boost.Build's <a href="http://www.intel.com/software/products/compilers/c60/">intel-linux</a> toolset supports the
<p>Boost.Build's <a href="http://www.intel.com/software/products/compilers/c60l/">intel-linux</a> toolset supports the
Intel C++ Compiler for Linux.
<h2>Configuration Variables</h2>

View File

@@ -21,13 +21,11 @@
<h2>Introduction</h2>
<p>Boost.Build's <a href="kcc-tools.html">kcc</a> toolset supports the
<p>Boost.Build's <a href="http://developer.intel.com/software/products/kcc/">kcc</a> toolset supports the
Intel KAI C++ Compiler.
<p><b>WARNING:</b> This compiler is no longer being distributed by Intel, see the
<a href="http://developer.intel.com/software/products/kcc/announcement.htm">announcement</a> for details.
And our support for it is questionable. We would love it if someone out there with this
compiler would give us feedback on this support.
<h2>Configuration Variables</h2>

View File

@@ -4,16 +4,10 @@
# express or implied warranty, and with no claim as to its suitability
# for any purpose.
# This file is /NOT/ up-to-date; please use other toolset description
# files as examples.
#
# I've tried to bring it up-to-date. -jsiek
flags kcc CFLAGS <debug-symbols>on : -g ;
flags kcc LINKFLAGS <debug-symbols>on : -g ;
flags gcc LINKFLAGS <debug-symbols>off : -s ;
flags kcc LINKFLAGS <debug-symbols>off : -s ;
flags kcc CFLAGS <optimization>off : +K0 ;
flags kcc CFLAGS <optimization>speed : +K2 ;
@@ -36,8 +30,9 @@ flags kcc NEEDLIBS <library-file> ;
flags kcc FINDLIBS <find-library> ;
kcc.bin-directory = [ conditional $(kcc.root-directory) : $(kcc.root-directory)$(SLASH)bin$(SLASH) : " " ] ;
detect-build-tools kcc : "KCC" ;
set-as-singleton kcc.root-directory ;
kcc.bin-directory = $(kcc.root-directory)$(SLASH)bin$(SLASH) ;
kcc.bin-directory ?= " " ;
#### Link ####
@@ -83,6 +78,6 @@ rule Archive-action
actions updated together piecemeal kcc-Archive-action
{
KCC -g $(ARFLAGS) -o "$(<)" "$(>)"
$(kcc.bin-directory)KCC -g $(ARFLAGS) -o "$(<)" "$(>)"
}

View File

@@ -20,7 +20,7 @@
#//<a href="http://www.metrowerks.com/products/windows/">Metro-<br>werks<br>Code-<br>Warrior</a>
# singleton variables...
set-as-singleton METROWERKS_ROOT METROWERKS_INCLUDE_ROOT CWFOLDER ;
set-as-singleton METROWERKS_ROOT CWFOLDER ;
# Get these variable set on the targets so that we can re-use the
# build actions for other toolsets using this one as a base.

View File

@@ -26,7 +26,7 @@ SGI MIPSpro C and C++ compilers.
<h2>Configuration Variables</h2>
The como toolset responds to the following variables which can be set in the
The mipspro toolset responds to the following variables which can be set in the
environment or configured on the jam command-line using
<code>-s<i>VARIABLE_NAME</i>=</code><i>value</i>:

150
msvc-stlport-tools.html Normal file
View File

@@ -0,0 +1,150 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="boost.css">
<title>Boost.Build - msvc-stlport toolset</title>
</head>
<body link="#0000ff" vlink="#800080">
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
"header">
<tr>
<td valign="top" width="300">
<h3><a href="http://www.boost.org"><img height="86" width="277" alt="C++ Boost" src="../../c++boost.gif" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center">Boost.Build</h1>
<h2 align="center">msvc-stlport toolset</h2>
</td>
</tr>
</table>
<hr>
<h2>Introduction</h2>
<p>Boost.Build's <a
href="http://msdn.microsoft.com/visualc/">msvc-stlport</a> toolset
supports the <td>Microsoft <a
href="http://msdn.microsoft.com/visualc/">Visual C++</a> command-line
tools, using the <a href="http://www.stlport.org">STLport</a> standard
library implementation on Microsoft Windows. It is designed to allow
you to build and test with multiple installed versions of STLPort, so
that objects build in each configuration will be built into separate
directories.
<h2><a name="configuration">Configuration Variables</a></h2>
The <code>msvc</code> toolset responds to the following variables,
which can be set in the environment or configured on the jam
command-line using
<code>-s<i>VARIABLE_NAME</i>=</code><i>value</i>. It is an extension
of the <a href="msvc-tools.html">msvc toolset</a> and therefore
responds to all of the MSVC <a
href="msvc-tools.html#configuration">configuration variables</a> in
addition to those listed below.
<p>In the table below, <i>version</i> corresponds to an
STLPort version number, e.g. &quot;<code>4.5.3</code>&quot;.
<table border="1">
<tr><th>Variable Name <th>Semantics <th>Default <th>Notes
<tr>
<td><code>STLPORT_PATH</code>
<td>A directory containing at least one subdirectory of the form
<code>/STLPort-</code><i>version</i> where an STLPort
installation can be found.
<td><i>empty</i>
<td>Allows easy configuration for an installation where
several STLPort versions are installed under a single directory.
<tr>
<td><code>STLPORT_</code><i>version</i><code>_PATH</code>
<td>The directory where the specific STLPort <i>version</i>
installation can be found, in case there is no central
location appropriate for <code>STLPORT_PATH</code>, above, or
a particular version's installation is not located in the
usual place.
<td><i>empty</i>
<td>Allows configuration of a specific STLPort installation.
<tr>
<td><code>STLPORT_VERSION</code>
<td>The version of STLPort in use by default.
<td><code>4.5.3</code>
<td>Other values can be selected in parallel setting the <a
href="build_system.htm#initiating">build property</a>
&lt;stlport-version&gt; to values from the list of
<code>$(STLPORT_VERSIONS)</code>
<tr>
<td><code>STLPORT_VERSIONS</code>
<td>A space-separated list of alternate versions of STLport available on this machine.
<td><code>4.5&nbsp;4.0</code>
</table>
<h2><a name="features">Toolset-Specific Features</a></h2>
The following <code>msvc-stlport</code>-specific <a
href="build_system.htm#features">features</a> can be used in target build
requirements or in the <a href="build_system.htm#initiating"><code>BUILD</code></a> variable:
<table border="1">
<tr><th>Feature <th>Values <th>Default <th>Semantics
<tr>
<td><code>stlport-iostream</code>
<td><code>off on</code>
<td><code>off</code>
<td>Controls whether STLPort's own iostreams are in use. Though
this setting is <code>off</code> by default to save users from
having to build STLPort, we strongly recommend <code>on</code>
instead.
<tr>
<td><code>stlport-version</code>
<td><code>$(STLPORT_VERSION)&nbsp;$(STLPORT_VERSIONS)</code> (see above)
<td><code>$(STLPORT_VERSION)</code>
<td>Selects a version of STLPort for each target
<tr>
<td><code>stlport-cstd-namespace</code>
<td><code>std global</code>
<td><code>std</code>
<td>Controls whether or not names from the &quot;C&quot; library
headers such as &lt;cstdlib&gt; are imported into <code>namespace
std</code>.
</table>
<hr>
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
14 May, 2002
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href="../../people/dave_abrahams.htm">Dave Abrahams</a>
2002. All Rights Reserved.</i></p>
</body>
</html>

View File

@@ -84,8 +84,8 @@ rule get-stlport-root
ECHO ;
ECHO STLPORT_VERSIONS - Alternate versions of STLport available on this machine. Defaults to \"4.5 4.0\". ;
ECHO ;
ECHO "Note that STLPort iostreams are /not/ in use by default. To enable them, you must place"
ECHO " <stlport-iostream>on in your BUILD variable or in target requirements."
ECHO "Note that STLPort iostreams are /not/ in use by default. To enable them, you must place" ;
ECHO " <stlport-iostream>on in your BUILD variable or in target requirements." ;
EXIT ;
}

69
msvc-tools.html Normal file
View File

@@ -0,0 +1,69 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="boost.css">
<title>Boost.Build - msvc toolset</title>
</head>
<body link="#0000ff" vlink="#800080">
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
"header">
<tr>
<td valign="top" width="300">
<h3><a href="http://www.boost.org"><img height="86" width="277" alt="C++ Boost" src="../../c++boost.gif" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center">Boost.Build</h1>
<h2 align="center">msvc toolset</h2>
</td>
</tr>
</table>
<hr>
<h2>Introduction</h2>
<p>Boost.Build's <a href="http://msdn.microsoft.com/visualc/">msvc</a>
toolset supports the Microsoft Visual C++ command-line tools on
Microsoft Windows. It supports any version of Visual C++, but in case
you have more than one version of Visual C++ installed, and you want
to use both, the additional <a href="vc7-tools.html">vc7</a> toolset
can be used for Visual C++ 7.0.
<h2><a name="configuration">Configuration Variables</a></h2>
The <code>msvc</code> toolset responds to the following variables, which can be set in the
environment or configured on the jam command-line using
<code>-s<i>VARIABLE_NAME</i>=</code><i>value</i>:
<table border="1">
<tr><th>Variable Name <th>Semantics <th>Default <th>Notes
<tr>
<td><code>MSVC_ROOT</code>
<td>The path to the MSVC installation directory
<td><code>c:\Program&nbsp;Files\Microsoft&nbsp;Visual&nbsp;C++\VC98</code>
<td>If <code>MSVCDir</code> is set in the environment, the toolset
will assume <code>VCVARS32.BAT</code>has already been called, and
will ignore this variable.
<tr>
<td><code>VISUALC</code>
<td>The path to the MSVC installation directory
<td><code>c:\Program&nbsp;Files\Microsoft&nbsp;Visual&nbsp;C++\VC98</code>
<td>If <code>MSVCDir</code> or <code>MSVC_ROOT</code> is set in
the environment, the toolset will assume
<code>VCVARS32.BAT</code>has already been called, and will ignore
this variable.
</table>
<hr>
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
14 May, 2002
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href="../../people/dave_abrahams.htm">Dave Abrahams</a>
2002. All Rights Reserved.</i></p>
</body>
</html>

View File

@@ -24,23 +24,36 @@ flags msvc VC_PDB_NAME ;
# compute MSVC tool path
# You can either put the msvc bin directory in your PATH, or you can set
# MSVCDir to point at the msvc installation directory
# Some installations set MSVCDIR instead of MSVCDir; who knows why?
MSVCDir ?= $(MSVCDIR) ;
# If MSVCDir is not set the user hasn't run VCVARS32.BAT
if ! $(MSVCDir)
{
# In case someone set VISUALC in order to build Jam, we can just use that.
MSVC_ROOT ?= $(VISUALC) ;
# Otherwise, guess a standard installation directory
MSVC_ROOT ?= "C:\\Program Files\\Microsoft Visual C++\\VC98" ;
VC_TOOL_PATH ?= "$(MSVC_ROOT)"$(SLASH)bin$(SLASH) ;
VC_SETUP ?= "CALL \"$(VC_TOOL_PATH)VCVARS32.BAT\" >nul" ;
# Reconstitutes paths containing spaces
MSVC_ROOT = $(MSVC_ROOT:J=" ") ;
# The tools are provisionallly located in the msvc6 bin
# directory. This may be overridden by toolsets which extend this
# one.
VC_TOOL_PATH = "$(MSVC_ROOT)"$(SLASH)bin$(SLASH) ;
# Always call VCVARS32.BAT before invoking the tools
VC_SETUP = "CALL \"$(VC_TOOL_PATH)VCVARS32.BAT\" >nul" ;
}
else
{
# This hack reconstitutes paths containing spaces as long as
# they don't contain any consecutive spaces.
while $(MSVCDir[2])
{
MSVCDir = $(MSVCDir[1])" "$(MSVCDir[2]) $(MSVCDir[3-]) ;
}
# Reconstitutes paths containing spaces
MSVCDir = $(MSVCDir:J=" ") ;
VC_TOOL_PATH ?= "" ; # Don't clobber adjoining text if MSVCDir is already set
# Don't clobber adjoining text or use explicit paths if MSVCDir is already set
VC_TOOL_PATH = "" ;
}
VC_COMPILER = cl ;

View File

@@ -28,6 +28,9 @@ if $(NT)
{
PYTHON_ROOT ?= c:/tools/python ;
# Reconstitute any paths split due to embedded spaces.
PYTHON_ROOT = $(PYTHON_ROOT:J=" ") ;
PYTHON_LIB_PATH ?= $(PYTHON_ROOT)/libs $(PYTHON_ROOT)/PCBuild ;
PYTHON_STDLIB_PATH ?= $(PYTHON_ROOT)/Lib ;
@@ -60,6 +63,7 @@ else if $(UNIX)
{
PYTHON_VERSION ?= 1.5 ;
PYTHON_ROOT ?= /usr/local ;
PYTHON_ROOT = $(PYTHON_ROOT:J=" ") ;
PYTHON_INCLUDES ?= $(PYTHON_ROOT)/include/python$(PYTHON_VERSION) ;
PYTHON_LIB_PATH ?= $(PYTHON_ROOT)/lib/python$(PYTHON_VERSION)/config ;
PYTHON_STDLIB_PATH ?= $(PYTHON_ROOT)/lib/python$(PYTHON_VERSION) ;
@@ -291,15 +295,12 @@ rule boost-python-runtest (
# declare the two subsidiary tests.
declare-local-target $(<) : $(>) : $(PYTHON_PROPERTIES) : $(4) : PYTHON_TEST ;
declare-local-target $(<) : $(>) : $(PYTHON_PROPERTIES) : $(4) : PYTHON_RUNTEST ;
declare-local-target $(<) : $(>) : $(PYTHON_PROPERTIES) : $(4) <suppress>true : PYTHON_RUNTEST ;
}
rule boost-python-test ( name : sources + : requirements * : default-BUILD * )
{
type-DEPENDS test : $(name) ;
local gSUPPRESS_FAKE_TARGETS = true ;
extension $(name) : $(sources) : $(requirements) : $(4) ;
extension $(name) : $(sources) : $(requirements) <suppress>true : $(4) ;
}
# special rules for two new target types: PYTHON_TEST and PYTHON_RUNTEST.

View File

@@ -0,0 +1,2 @@
# The presence of this file emulates the Boost 1.27.0 release
include $(BOOST_ROOT)/tools/build/bootstrap.jam ;

View File

@@ -1598,6 +1598,9 @@ rule subvariant-target ( target : subvariant-id build-properties * : toolset var
# Remember the path from the build root to the subvariant directory
gSUBVARIANT_PATH($(subvariant)) = $(subvariant-id) ;
# Add target suppression if <suppress> was in the requirements
local gSUPPRESS_FAKE_TARGETS = [ get-values <suppress> : $(gTARGET_REQUIREMENTS($(target))) ] $(gSUPPRESS_FAKE_TARGETS) ;
declare-fake-targets $(target) : $(target-files) ;
# set up gBUILD_PROPERTIES for include-tools (below)
@@ -1642,7 +1645,7 @@ rule subvariant-target ( target : subvariant-id build-properties * : toolset var
depend-on-libraries $(target-files) : $(libs) ;
depend-on-dlls $(target-files) : $(dlls) ;
}
# dispatch to the appropriate declaration function. Here we are using an
# FTJam-only feature (thanks, David Turner!)
local ignored = [ $(gGENERATOR_FUNCTION($(target-type))) $(target-files)
@@ -1783,6 +1786,9 @@ rule unit-test
# Used to build command files from a list of sources.
rule build-command-file ( command : sources * )
{
# Clean up after ourselves
Clean clean : $(command) ;
DEPENDS $(command) : $(sources) ;
# Check whether there's anything to dump, so that we don't end up

View File

@@ -16,7 +16,7 @@
<h2><a name="synopsis">Synopsis</a></h2>
<p>Boost.Build is a system for large project software construction built on
Boost Jam, a descendant of &quot;<a
Boost.Jam, a descendant of &quot;<a
href="http://www.perforce.com/jam/jam.html">Perforce Jam</a>&quot;, an
open-source make replacement<a href="#1">[1]</a>. Key features are:
@@ -41,6 +41,19 @@
<li>Automatic building of subproject dependencies
</ul>
<h2><a name="status">Status</a></h2>
Boost.Build v1 is a useful, mature system. However, its design and
structure are not easily adapted to support some of the features
we'd like to see in the future. To this end, the Boost.Build
developers have begun work on v2 of Boost.Build, which will be
based around this
<a href="architecture.html">design document</a>. If you are
interested in contributing to this effort or you wish to discuss
the design of Boost.Build, please post inquiries to the <a
href="http://groups.yahoo.com/group/jamboost/">jamboost</a>
mailing list at yahoogroups.
<p><a href="#design_criteria">Here</a> are some of the design criteria that
led to these features.
@@ -49,11 +62,13 @@
<ul>
<li><a href="#synopsis">Synopsis</a>
<li><a href="#status">Status</a>
<li>
<a href="#getting_started">Getting Started</a>
<ul>
<li><a href="#installing_jam">Installing Jam</a>
<li><a href="#installing_jam">Installing Boost.Jam</a>
<li><a href="#initiating">Initiating a Build</a>
@@ -128,7 +143,7 @@
<ul>
<li><a href="#variable_quoting">Command-line and Environment Variable Quoting</a>
<li><a href="#jambase_replacement">Jambase Replacement</a>
<li><a href="#jambase_replacement">Startup Behavior</a>
<li><a href="#rule_indirection">Rule Indirection</a>
<li><a href="#argument_lists">Argument Lists</a>
@@ -137,7 +152,7 @@
<ul>
<li><a href="#module_declaration">Declaration</a>
<li><a href="#module_locals">Local Variables</a>
<li><a href="#module_locals">Variable Scope</a>
<li><a href="#local_rules">Local Rules</a>
<li><a href="#RULENAMES_rule">The <tt>RULENAMES</tt> rule</a>
<li><a href="#IMPORT_rule">The <tt>IMPORT</tt> rule</a>
@@ -146,11 +161,11 @@
</ul>
<li><a href="#local_foreach">Local for Loop Variables</a>
<li><a href="#while_loops">While Loops</a>
<li><a href="#negative_indexing">Negative Indexing</a>
<li><a href="#BINDRULE">Target Binding Detection</a>
<li><a href="#FAIL_EXPECTED">Return Code Inversion</a>
<li><a href="#NOCARE">Ignoring Return Codes</a>
<li><a href="#RMOLD">Removing outdated targets</a>
<li><a href="#SUBST_rule">The <tt>SUBST</tt> Rule</a>
<li><a href="#JAM_VERSION">The <tt>JAM_VERSION</tt> global variable</a>
<li>
@@ -183,40 +198,26 @@
<h2><a name="getting_started">Getting Started</a></h2>
<h3><a name="installing_jam">Installing Boost Jam</a></h3>
<ul>
<li>The Boost Jam sources are located in the <tt>tools/build/jam_src</tt>
subdirectory of the Boost installation.
<li>The <a href="http://public.perforce.com/public/jam/src/README">Jam
README</a> contains basic installation instructions.
<li>If you are installing on Windows, the make process may prompt you to set
some environment variables, and stop. Don't be alarmed; just follow the
instructions and start over. Please keep in mind that these variable settings
are case-sensitive. The variable settings necessary for bootstrapping
Jam are not needed once it has been built.
<li>Note that the supplied Makefile may require editing for your
platform; see the <a href=
"http://public.perforce.com/public/jam/src/README">Jam README</a> for
details. The Makefile is used for bootstrapping Jam; it builds Jam into a
subdirectory called <tt>bin.</tt><i>platform</i>.
</ul>
<h3><a name="installing_jam">Installing Boost.Jam</a></h3>
Follow these <a href="index.html#Jam">instructions</a> to acquire
a bjam executable for your platform. Install it somewhere in your
path.
<h3><a name="initiating">Initiating a Build</a></h3>
<p>The easiest way to get going is to set the <tt>BOOST_ROOT</tt>
environment variable to point at the Boost installation directory, though
you can also set <tt>BOOST_ROOT</tt> on the command-line, using
<tt>-s...</tt>. You can use the <tt>TOOLS</tt> variable to indicate which
toolset(s) to build with, and the <tt>BUILD</tt> variable to describe how
you want things built. In most cases it should be sufficient to invoke Jam
with no variable settings. The following examples all assume that
<tt>BOOST_ROOT</tt> has been set in the environment.
<p>Boost.Build responds to several global variable settins. The
easiest way to get going is usually to use environment variables,
though you can also set them on the command-line, using
<tt>-s</tt><i>VARIABLE_NAME</i><tt>=</tt><i>value</i>. In
addition to the <a href="index.html#Configuring">toolset
configuration variables</a>, you can use the <tt>TOOLS</tt>
variable to indicate which toolset(s) to build with, and the
<tt>BUILD</tt> variable to describe how you want things built. In
many cases it should be sufficient to invoke <code>bjam</code>
with no variable settings.
<p>Here are some sample Boost Jam invocations:
<p>Some example Boost.Jam invocations:
<table border="1" summary="Sample Jam Invocations=">
<tr>
@@ -227,7 +228,7 @@
<tr>
<td>
<pre>
jam -sTOOLS=gcc my_target
bjam -sTOOLS=gcc my_target
</pre>
<td>default (debug) <tt><a href="#build">BUILD</a></tt> of
@@ -235,7 +236,7 @@ jam -sTOOLS=gcc my_target
<tr>
<td>
<pre>jam -f<i>allyourbase-path</i> -sTOOLS=&quot;msvc gcc&quot;</pre>
<pre>bjam -sTOOLS=&quot;msvc gcc&quot;</pre>
<td>default-build <tt>all</tt> with msvc and gcc
@@ -243,7 +244,7 @@ jam -sTOOLS=gcc my_target
<td>
<pre>
set TOOLS=msvc
jam
bjam
</pre>
<td>Set an NT environment variable to always build with MSVC<br>
@@ -252,15 +253,16 @@ jam
<tr>
<td>
<pre>
jam -sBUILD=release
bjam &quot;-sBUILD=release &lt;debug-symbols&gt;on&quot;
</pre>
<td>release build <tt>all</tt> with default <tt><a href=
"#tools">TOOLS</a></tt>:<br>
<td>release build with debug symbols of <tt>all</tt> using
default <tt><a href=
"#tools">TOOLS</a></tt>
<tr>
<td><pre>jam -sBUILD=&quot;debug release&quot;</pre>
<td><pre>bjam -sBUILD=&quot;debug release&quot;</pre>
<td>debug and release build <tt>all</tt>.
</table>
@@ -277,7 +279,7 @@ jam -sBUILD=release
<blockquote><pre>
&gt; <a href="#build">BUILD</a>=&quot;debug release&quot; <i># assuming Unix</i>
&gt; export <a href="#build">BUILD</a>
&gt; jam ...
&gt; bjam ...
</pre></blockquote>
This approach can be OK for quick-and-dirty tests, but environment variable
settings tend to be unstable and non-uniform across users and machines, so
@@ -659,7 +661,7 @@ exe my_target : my_source1.cpp my_source2.c ;
<td rowspan="2">Platform-dependent
<td><tt>-sTOOLS="gcc msvc"</tt>
<td><tt>&quot;-sTOOLS=gcc msvc&quot;</tt>
<td>build with gcc and msvc
<tr>
@@ -679,18 +681,18 @@ exe my_target : my_source1.cpp my_source2.c ;
<td>build the <tt>release</tt> variant
<tr>
<td><tt>-sBUILD="debug release"</tt>
<td><tt>&quot;-sBUILD=debug release&quot;</tt>
<td>build both <tt>debug</tt> and <tt>release</tt> variants
<tr>
<td><tt>-sBUILD="&lt;optimization&gt;speed"</tt>
<td><tt>&quot;-sBUILD=&lt;optimization&gt;speed&quot;</tt>
<td>build a subvariant of the default variant (<tt>debug</tt>) with
optimization for speed.
<tr>
<td><tt>-sBUILD="debug release &lt;runtime-link&gt;static/dynamic"</tt>
<td><tt>&quot;-sBUILD=debug release &lt;runtime-link&gt;static/dynamic&quot;</tt>
<td>build subvariants of the debug and release variants that link to
@@ -1361,60 +1363,38 @@ jam -sMSVCNT=&quot;\&quot;\&quot;C:\Program Files\Microsoft Visual C++\VC98\&quo
set MSVCNT=&quot;&quot;C:\Program Files\Microsoft Visual C++\VC98\&quot;&quot;
</pre></blockquote>
<h4><a name="jambase_replacement">Jambase Replacement</a></h4>
<h4><a name="jambase_replacement">Startup Behavior</a></h4>
<p>New logic has been added to allow the built-in Jambase to be replaced
without recompiling Jam or adding command-line arguments. The user can
control the location of the build system by setting any of the <tt>JAMBASE</tt>,
<tt>BOOST_ROOT</tt>, or <tt>BOOST_BUILD_PATH</tt> environment variables (the settings of
these variables can also be overridden on the command-line using the
<tt>-s<i>VARIABLE</i>=</tt>... option).
<p>The process is controlled by variables (in decreasing
precedence):
<ul>
<li>If <tt>JAMBASE</tt> is set, it specifies the path to the Jambase
replacement. Non-rooted paths are computed relative to the directory of
Jam's invocation.
<li>Otherwise, if <tt>BOOST_BUILD_PATH</tt> or <tt>BOOST_ROOT</tt> is set,
the build system filename is <tt><b>boost-build.jam</b></tt>.
<li>If the build system filename does not contain a path specification,
the build system file is searched for on <tt>$(BOOST_BUILD_PATH)</tt>,
then at <tt>$(BOOST_ROOT)/tools/build</tt>.
<li>If <tt>BOOST_BUILD_PATH</tt> was not set, it will be set to
<tt>$(BOOST_ROOT)/tools/build</tt>.
<li>If neither <tt>JAMBASE</tt>, <tt>BOOST_ROOT</tt>, nor
<tt>BOOST_BUILD_PATH</tt> is set, we use the built-in Jambase (nearly
identical to the <a
href="http://freetype.sourceforge.net/jam/index.html">FTJam</a> Jambase)
and load the user's Jamfile. Perforce Jam has this behavior, and it is
used for building Jam itself. <b>Thus, when you rebuild Jam, these
variables should be unset</b>.
</ul>
<p>The rationale for this behavior is as follows:
<ul>
<li> The Jam executable should allow the Jambase to be overridden to
implement other build systems without the user having any knowledge
of Boost, thus the <tt>JAMBASE</tt> variable.
<li> <tt>BOOST_BUILD_PATH</tt> is designed to be used to find all <a
href="#module_support">modules</a> used by the build system, so that users
and system administrators may non-intrusively add modules to the system.
<li> Many Boost users already have <tt>BOOST_ROOT</tt> set. If a user
doesn't want to explicitly set up <tt>BOOST_BUILD_PATH</tt>,
<tt>BOOST_ROOT</tt> will supply reasonable behavior.
</ul>
<p>The Boost.Build v2 initialization behavior has been
implemented. This behavior only applies when the executable
being invoked is called &quot;<code>bjam</code>&quot; or, for
backward-compatibility, when the <code>BOOST_ROOT</code>
variable is set.
<ol>
<li> We attempt to load "boost-build.jam" by searching from the
current invocation directory up to the root of the
file-system. This file is expected to invoke the
<tt>boost-build</tt> rule to indicate where the Boost.Build
system files are, and to load them.
<li> If boost-build.jam is not found we error and exit, giving
brief instructions on possible errors.
<blockquote>
As a backward-compatibility measure for older versions of Boost.Build,
when the <code>BOOST_ROOT</code> variable is set, we first search for
<code>boost-build.jam</code> in <code>$(BOOST_ROOT)/tools/build</code>
and <code>$(BOOST_BUILD_PATH)</code>. If found, it is loaded and
initialization is complete.
</blockquote>
<li> The <code>boost-build</code> rule adds its (optional) argument
to the front of <code>BOOST_BUILD_PATH</code>, and attempts to
load <code>bootstrap.jam</code> from those directories. If a
relative path is specified as an argument, it is treated as
though it was relative to the <code>boost-build.jam</code>
file.
<li> If the bootstrap.jam file was not found, we print a likely
error message and exit.
</ol>
<h4><a name="rule_indirection">Rule Indirection</a></h4>
@@ -1573,67 +1553,62 @@ module your_module
<p>
<h5><a name="module_locals">Local Variables</a></h5>
<tt>module local </tt> <i>expression</i><tt> ;</tt><br>
<i>- or -</i><br>
<tt>module local </tt> <i>expression</i><tt> = </tt>
<i>expression2</i><tt> ;</tt>
<h5><a name="module_locals">Variable Scope</a></h5>
<p>The variables named by <i>expression</i> are given a distinct value
in the module, and can be manipulated by code executing in the module
without affecting variable bindings seen by other modules. If the
assignment form is used, <i>expression2</i> is assigned to the
variables when the declaration is executed. For example:
<blockquote>
<p>Each module has its own set of dynamically nested variable
scopes. When execution passes from module A to module B, all
the variable bindings from A become unavailable, and are
replaced by the bindings that belong to B. This applies
equally to local and global variables:
<pre>
module M {
<b>module local</b> x = a b c ;
rule f ( )
{
<blockquote>
module A
{
x = 1 ;
rule f ( )
{
local x = 1 2 3 ; # temp override for M's x
N.g ; # call into module N, below
local y = 999 ; # becomes visible again when B.f calls A.g
B.f ;
}
rule g ( )
{
ECHO $(y) ; # prints &quot;999&quot;
}
ECHO $(x) ; # prints "a b c"
}
}
module N {
rule g ( )
{
x = foo bar baz ; # sets global x
M.h ; # call back into M, below
}
module B
{
y = 2 ;
rule f ( )
{
ECHO $(y) ; # always prints &quot;2&quot;
A.g ;
}
}
module M {
rule h ( )
{
ECHO $(x) ; # prints "1 2 3"
}
}
M.f ;
ECHO $(x) ; # prints "foo bar baz"
</blockquote>
</pre>
</blockquote>
The only way to access another module's local variables is through a
rule defined in that module:
The only way to access another module's variables is by
entering that module:
<blockquote>
<pre>
module M {
rule get ( names * )
{
return $($(names)) ;
}
rule peek ( module-name ? : variables + )
{
module $(module-name)
{
return $($(&gt;)) ;
}
}
ECHO [ <b>M.get</b> x ] ; # prints "a b c"
</pre>
</blockquote>
Note that because existing variable bindings change whenever a
new module scope is entered, argument bindings become
unavailable. That explains the use of
&quot;<code>$(&gt;)</code>&quot; in the <code>peek</code> rule
above.
<h5><a name="local_rules">Local Rules</a></h5>
<blockquote>
@@ -1757,36 +1732,6 @@ for <b>local</b> y in $(x)
ECHO $(y) ; # prints &quot;1&quot;, &quot;2&quot;, or &quot;3&quot;
}
ECHO $(y) ; # prints &quot;4 5 6&quot;
</pre></blockquote>
<h4><a name="while_loops">While Loops</a></h4>
In classic Jam, some constructs are only possible using recursion:
<blockquote><pre>
# returns the part of $(list) following the first occurrence of $(symbol)
rule after-symbol ( symbol : list * )
{
if ! $(list) || ( $(symbol) = $(list[1]) )
{
return $(list[2-]) ;
}
else
{
return [ after-symbol $(symbol) : $(list[2-]) ] ;
}
}
</pre></blockquote>
The addition of <tt>while</tt> loops allows a simpler formulation for this and
many other rules:
<blockquote><pre>
rule after-symbol ( symbol : list * )
{
while $(list) &amp;&amp; $(list[1]) != $(symbol)
{
list = $(list[2-]) ;
}
return $(list) ;
}
</pre></blockquote>
<h4><a name="negative_indexing">Negative Indexing</a></h4>
@@ -1852,8 +1797,27 @@ rule bind-rule ( target : path )
should be built anyway. Boost Jam extends <tt>NOCARE</tt> to apply to
targets with build actions: if their build actions exit with a nonzero
return code, dependent targets will still be built.
<h4><a name="RMOLD">Removing Outdated Targets</a></h4>
<blockquote>
<pre>
rule RMOLD ( targets * )
</pre>
</blockquote>
<p>Perforce Jam removes any target files that may exist on disk
when the rule used to build those targets fails. However,
targets whose dependencies fail to build are not removed by
default. The <code>RMOLD</code> rule causes its arguments to be
removed if any of their dependencies fail to build.
<h4><a name="SUBST_rule">The <tt>SUBST</tt> Rule</a></h4>
<p><b>Note:</b> the <code>SUBST</code> rule is deprecated in favor
of Perforce Jam's built-in <cdoe>MATCH</cdoe> rule, which has been
rolled into Boost.Jam.
<p>The behavior of the <tt>SUBST</tt> rule for regular-expression matching
and replacement (originally added in <a href=
"http://freetype.sourceforge.net/jam/index.html">FTJam</a>) has been
@@ -1996,6 +1960,9 @@ rule BACKTRACE ( )
&quot;change&quot; a global variable by declaring a <tt>local</tt> of the
same name.
<p>Many of the variables that are used to configure how Boost.Build works
internally are listed <a href="variables.html">here</a> with brief descriptions.
<h3>Variables Associated with SubProject Identity</h3>
<ul>

View File

@@ -9,6 +9,7 @@ feature profiling : off on ;
feature struct-alignment : auto 1 2 4 8 16 ;
feature eh-model : default fast msvc ; # metrowerks only
feature vtable-thunks : default on off ; # gcc only
feature threading : single multi ;
@@ -67,6 +68,7 @@ gTARGET_TYPE_REQUIREMENTS(DLL) = <shared-linkable>true ;
##### Variant definitions ####
COMMON_PROPERTIES ?=
<vtable-thunks>default
<struct-alignment>auto
<eh-model>default
<threading>single

234
v1/gcc-nocygwin-tools.html Normal file
View File

@@ -0,0 +1,234 @@
<html>
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="boost.css">
<title>Boost.Build - gcc-nocygwin toolset</title>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
"header">
<tr>
<td valign="top" width="300">
<h3><a href="http://www.boost.org"><img height="86" width="277" alt="C++ Boost" src="../../c++boost.gif" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center">Boost.Build</h1>
<h2 align="center">gcc-nocygwin toolset</h2>
</td>
</tr>
</table>
<hr>
<h2>Introduction</h2>
<p>
This page describes the gcc-nocygwin toolset, which builds Boost using
the -mno-cygwin option of the Cygwin gcc compiler. This avoids
introducing dependencies on the Cygwin Unix-emulation layer, allowing
you to build Windows executables which are not dependant on
cygwin1.dll.
</p>
<p>
You could achieve the same results by using the MinGW version of gcc,
but the Cygwin compiler has two advantages:
<ol>
<li>It can build for both environments - Unix emulation and Windows
native - with one compiler.
<li>You can use the latest versions of GCC. The latest released
version of MinGW GCC is 2.95.3, and building MinGW-specific versions
of GCC 3.0.x has proven to be quite difficult. However, it's
straightforward under Cygwin. Just be sure to configure with
<code>--enable-languages=c,c++</code> to disable other languages which
fail to build properly.
</ol>
</p>
<h2><a name="configuration">Configuration Variables</a></h2>
<p>
The gcc toolset responds to the variables shown in the following table,
which can be set in the environment or configured on the jam
command-line using <code>-s<i>VARIABLE_NAME</i>=</code><i>value</i>.
</p>
<p>
This toolset is an extension to the gcc-stlport toolset and therefore
also responds to all of the configuration variables for
<a href="gcc-stlport-tools.html#configuration">gcc-stlport</a>
and
<a href="gcc-tools.html#configuration">gcc</a>
in addition to those listed below.
</p>
<table border="1">
<tr>
<th>Variable Name</th>
<th>Semantics</th>
<th>Default</th>
<th>Notes</th>
</tr>
<tr>
<td>
<code>NOCYGWIN_<br>STLPORT_<br>LIB_ID</code>
</td>
<td>
The name used to generate the stlport library names (corresponding
to the LIB_BASENAME variable in the STLport make files).
</td>
<td>
mingw32
</td>
<td>
This forms the middle part of the STLport library
names, for example libstlport_<b>mingw32</b>_debug.a
</td>
</tr>
</table>
<h2>Prerequisites</h2>
<p>
Obviously, you'll need Cygwin installed on your Windows
system. Earlier releases of Cygwin came as monolithic packages, but
this switched to individually selectable components around 2000. If
you've got a recent installation, you'll have to make sure you've got
the optional mingw-runtime package installed. Have a look in
/lib/mingw to see if things like libmingw32.a and libcrtdll.a are
present, and that the directory /usr/include/mingw includes the
standard headers stdio.h etc. Install the additional package if
necessary.
</p>
<p>
You will also need the STLport standard library installed and fully
compiled (i.e. using its own iostreams) without any Cygwin
dependencies. This would be very easy if you had the real mingw
compiler installed, because the STLport distribution includes a
ready-made makefile for this, called gcc-mingw.mak. Making this work
with the Cygwin compiler requires a couple of changes to the file (see
<a href="#stlport">below</a> for details). Sooner or later there may
be a specific nocygwin makefile for STLport which will make this
easier.
</p>
<p>
Finally, you will need a Boost jam executable that was built for
Windows (aka NT). The Cygwin-built Boost jam is <b>not</b> suitable,
primarily because it executes commands via the Cygwin shell, which
doesn't handle backslashes in Windows pathnames. Until there is a
specific nocygwin makefile for Boost jam, it is probably best to
download the prebuilt executable for Windows.
</p>
<h2>Building with gcc-nocygwin</h2>
<p>
Refer to the <a
href="gcc-stlport-tools.html#configuration">gcc-stlport</a>
configuration section for details of the <code>STLPORT_ROOT</code>
variable, which you'll have to configure (at the very least). Make
sure to use Windows-style pathnames and not the /cygdrive/x/... style
(you're using the Windows native Boost jam, remember).
</p>
<p>
Configure additional variables as described <a
href="../../libs/python/doc/building.html">here</a> if you want to
build the <a href="../../libs/python/doc/index.html">Boost.Python</a>
library, making sure to point it at a <b>Windows</b> installation of
Python and not a Cygwin one. At the time of writing, the Python
example simple_vector.cpp fails to compile in debug mode
because of an incompatability with the STLport debugging STL
containers, but everything else should build properly.
</p>
<p>
If your STLport libraries don't have names like stlport_mingw32&#8230;
you will need to set the environment variable
<code>NOCYGWIN_STLPORT_LIB_ID</code> to replace the "mingw32" part of
the library names.
</p>
<p>
Once your environment is right, you can
<a href="build_system.htm#initiating">start</a> the build as for any other
toolset, using the toolset name "gcc-nocygwin". If you want to
see exactly what's going on, try supplying jam the <code>-d2</code>
option to show the raw commands as they execute.
</p>
<p>
If you work with COM or DirectX, you will want to force gcc to
generate vtable-thunks by including <code>&lt;vtable-thunks&gt;on</code>
in the BUILD <a href="build_system.htm#user_globals">global
variable</a>. If you're messing around with this stuff, make extra sure
that you build all your libraries (including STLport) with the same
vtable style.
<h2>Boost threads library and gcc 2.95.3-5</h2>
<p>
The Cygwin-special gcc release 2.95.3-5 does not include a thread-safe
version of libgcc.a, which prevents any of it's code being
thread-safe, even with the -mthreads option. If you're feeling lucky,
grafting in the thread-safe versions of _eh.o and frame.o from the
mingw 2.95.3 libgcc.a seems to fix the problem (give the hybrid
library a new name and adjust the compiler's specs file
appropriately). Later releases of the Cygwin compiler probably won't
suffer from this restriction, so you should definitely upgrade if you
want to use the threads library.
</p>
<a name="stlport"></a>
<h2>Building a native STLport with Cygwin gcc</h2>
<p>
The current release (4.5.3) of STLport does not include an extra
makefile to build the libraries with the -mno-cygwin mode of Cygwin
gcc, but you can use the existing <code>gcc-mingw.mak</code> file by
setting the
<code>CXXFLAGS_COMMON</code> variable on your make command line, as follows:
</p>
<pre>
make -fgcc-mingw.mak &quot;CXXFLAGS_COMMON=-mno-cygwin -I/usr/include/mingw&quot;
</pre>
You might also need to add <code>-mthreads</code> and/or
<code>-fvtable-thunks</code> within the quotes, depending on what kind
of executables you ultimately want to produce. You can create multiple
versions of the libraries by setting a different
<code>LIB_BASENAME</code> in each case, and set up a corresponding
value in the
<code>NOCYGWIN_STLPORT_LIB_ID</code> shell variable before building
Boost.
</p>
<p>If you have built a newer version of Cygwin GCC from source, or
you've built an older one and configured it with
<code>--prefix=</code>, you'll need to add the following
<code>DYN_LINK</code> variable setting in order to get the GCC support
libraries into the library search path when the STLPort DLLs are
built:
<pre>
&quot;DYN_LINK=c++ -shared -L/usr/local/lib -o&quot;
</pre>
(substitute the path you passed to <code>--prefix=</code> for
<code>/usr/local/lib</code> if you are using a non-standard
configuration).
<p>
Make sure that you're really compiling the STLport iostreams instead
of just wrapping the Cygwin gcc streams. The default behaviour for
STLport 4.x is correct, but it is possible to reconfigure this
manually. Refer to the documentation on selecting the IOStreams mode
if you're in doubt.
</p>
<p>
<i>
Toolset and docs contributed May 2002 by
<a href="mailto:RaoulGough@yahoo.co.uk">Raoul Gough</a>
</i>
</p>
</body>
</html>

83
v1/gcc-nocygwin-tools.jam Normal file
View File

@@ -0,0 +1,83 @@
# (C) Copyright David Abrahams and Carlos Pinto Coelho 2001, 2002.
# Permission to copy, use, modify, sell and distribute this software
# is granted provided this copyright notice appears in all
# copies. This software is provided "as is" without express or implied
# warranty, and with no claim as to its suitability for any purpose.
#
# gcc-nocygwin toolset by Raoul Gough (RaoulGough@yahoo.co.uk)
#
# This toolset builds boost on a cygwin system using the -mno-cygwin
# gcc option, which creates windows-native binaries (without any
# dependencies on cygwin1.dll). It requires an STLport built
# by mingw gcc, or maybe by cygwin gcc using the -mno-cygwin
# option, if you feel like messing with the STLport makefiles.
#
# Configuration:
#
# You need a boost jam executable that was built for NT, not
# cygwin. There are two reasons for this. Firstly, you need the
# NT jam variable to be set, and secondly, the cygwin build of
# boost jam executes commands via the cygwin shell, which doesn't
# handle backslashes in pathnames properly.
#
# Don't forget to set STLPORT_ROOT, either in your environment
# or in Jamrules in the boost installation directory. Also set
# BOOST_ROOT. Use native windows path names and not the
# /cygdrive/... style.
#
# Set NOCYGWIN_STLPORT_LIB_ID to set the STLport naming
# convention (default is "mingw32" which looks for libraries
# named like stlport_mingw32_stldebug.lib)
#
# Run boost jam from the boost install directory like this:
#
# jam -sTOOLS=gcc-nocygwin
#
# If things are going wrong, a handy jam option is -d2, which shows
# commands before execution.
#
NOCYGWIN_STLPORT_LIB_ID ?= mingw32 ;
{
local GCC_STLPORT_LIB_ID = $(NOCYGWIN_STLPORT_LIB_ID) ;
extends-toolset gcc-stlport ;
}
flags gcc-nocygwin CFLAGS : -mno-cygwin ;
flags gcc-nocygwin LINKFLAGS : -mno-cygwin ;
flags gcc-nocygwin LINKFLAGS <threading>multi : -mthreads ;
#### Link ####
#
# Duplicated from gcc-tools.jam (unfortunately) because we don't want
# IMPLIB_COMMAND to include -Wl,--export-all-symbols
#
rule Link-action
{
SPACE on $(<) = " " ;
# if we don't have a GNU linker then we can't pass any GNU-ld specific flags:
if $(NO_GNU_LN)
{
LNOPT on $(<) = ;
}
else
{
LNOPT on $(<) = "" ;
}
OUTTAG on $(<) = "" ;
SOTAG on $(<) = ;
ACTION_1 on $(<) = ;
# This will appear before the import library name when building a DLL, but
# will be "multiplied away" otherwise.
IMPLIB_COMMAND on $(<) = "-Wl,--exclude-symbols,_bss_end__:_bss_start__:_data_end__:_data_start__ -Wl,--out-implib," ;
DEPENDS $(<) : $(NEEDLIBS) ;
gRUN_LD_LIBRARY_PATH($(<)) += $(GCC_STDLIB_DIRECTORY) ;
gcc-Link-action $(<) : $(>) ;
}

View File

@@ -23,14 +23,16 @@
<p>Boost.Build's <a href="http://gcc.gnu.org">gcc-stlport</a> toolset supports the
GNU GCC compiler using <a href="http://www.stlport.org">STLport</a> as a replacement
to the GNU libg++. This toolset is an extension to the
<a href="gcc-tools.html">gcc toolset</a> and therefore supports the same functionality.
to the GNU libg++.
<h2>Configuration Variables</h2>
<h2><a name="configuration">Configuration Variables</a></h2>
The gcc-stlport toolset responds to the following variables which can be set in the
environment or configured on the jam command-line using
<code>-s<i>VARIABLE_NAME</i>=</code><i>value</i>:
<code>-s<i>VARIABLE_NAME</i>=</code><i>value</i>. This toolset is an extension to the
<a href="gcc-tools.html">gcc toolset</a> and therefore responds to all
of the GCC <a href="gcc-tools.html#configuration">configuration
variables</a> in addition to those listed below.
<table border="1">

View File

@@ -28,9 +28,9 @@ also supports <a href="http://www.cygwin.com">Cygwin</a> GCC, though
<a href="http://www.mingw.org">MinGW</a> has <a
href="mingw-tools.html">its own distinct toolset</a>.
<h2>Configuration Variables</h2>
<h2><a name="configuration">Configuration Variables</a></h2>
The gcc toolset responds to the following variables can be set in the
The gcc toolset responds to the following variables, which can be set in the
environment or configured on the jam command-line using
<code>-s<i>VARIABLE_NAME</i>=</code><i>value</i>:

View File

@@ -168,6 +168,8 @@ flags gcc CFLAGS <profiling>on : -pg ;
flags gcc LINKFLAGS <profiling>on : -pg ;
flags gcc C++FLAGS <rtti>off : -fno-rtti ;
flags gcc C++FLAGS <vtable-thunks>on : -fvtable-thunks ;
flags gcc C++FLAGS <vtable-thunks>off : -fvtable-thunks=0 ;
flags gcc CFLAGS <cflags> ;
flags gcc C++FLAGS <cxxflags> ;

View File

@@ -14,95 +14,107 @@
<img src="../../c++boost.gif" alt="c++boost.gif (8819 bytes)" align= "center" width="277" height="86">Building
Boost Libraries</h1>
<table border="1" cellpadding="5" width="656">
<tr>
<td width="638"><font size="5" color="#FF0000"><b>Read This
First!</b></font> <p>Boost.Build is fairly new as yet.&nbsp; Some features
are missing or incomplete. Instructions for accomplishing basic tasks
(this page) are rudimentary.&nbsp; But enough functionality is working
well to make using Boost.Build worthwhile.&nbsp; The important
bits-and-pieces are all there - what's left is some of the relatively
minor glue to make the system smooth and easy to use. Secondary tasks like
copying libraries to installation specific directories are weak.</p> <p>If
there isn't a configuration file (see <a href="#Tools">Tools</a>) available
for your favorite compiler, consider contributing one. </p> <p>Note
that the underlying Boost.Jam build engine is mature software, and the
original Jam build engine has been
widely used for many years.&nbsp; The Boost specific extensions are well
on their way to becoming stable, and have begun to attract interest and
use outside of Boost.</td>
</tr>
</table>
<p><a href="#Introduction">Introduction</a><br>
<a href="#Preliminaries">Preliminaries</a><br>
<a href="#Building">Building Boost Libraries</a><br>
<a href="#Moretools">More on using the tools</a><br>
<a href="#Tools">Tools available</a><br>
<a href="#Configuring">Configuring the tools</a><br>
<a href="#Tools">Supported Toolsets</a><br>
<a href="#Jam">Boost.Jam executable</a></p>
<h2><a name="Introduction">Introduction</a></h2>
<p>These instructions explain how to accomplish common tasks using <b>Boost.Build</b>,
the Boost Build System.&nbsp; The build system uses <a href="build_system.htm">
Boost.Jam</a>, an extension of the
<a href="http://www.perforce.com/jam/jam.html">Perforce Jam</a> portable <i>make</i>
replacement.</p>
<p>For tasks not covered here, see the full <a href="build_system.htm">build
system documentation</a>.</p>
<p>Note that many Boost libraries are implemented entirely within their headers,
and so can be used without building object libraries.&nbsp; Libraries that do
require building object libraries first include the Boost Python, Regular
Expression, and Thread libraries.</p>
<p>These instructions explain how to accomplish common tasks using
<b>Boost.Build</b>, the Boost Build System. The build system uses <a
href="build_system.htm"> Boost.Jam</a>, an extension of the
<a href="http://www.perforce.com/jam/jam.html">Perforce Jam</a>
portable <i>make</i> replacement.</p>
<p>For tasks not covered here, see the full <a
href="build_system.htm">build system documentation</a>.</p>
<p>Note that many Boost libraries are implemented entirely within
their headers, and so can be used without building object
libraries. Libraries that do require building object libraries first
include the <a href="../../libs/python/doc/index.html">Python</a>, <a
href="../../libs/regex/index.htm">Regex</a>, and <a
href="../../libs/thread/doc/index.html">Threads</a> libraries.
<h2><a name="Preliminaries">Preliminaries</a></h2>
<ul>
<li><a href="../../more/download.html">Download Boost</a>, and unpack the full
directory structure into some root directory.</li>
<li>Install the <a href="#Jam">Boost.Jam executable</a> if needed. <a href="#Jam">
Pre-builts</a> are available. Make sure it's in your path. (Note: Boost
requires an enhanced version of Jam; the basic version won't work.)</li>
<li>Set any environment variables required to run your compiler and related
tools from the command line. (It might be a good idea to verify your command
line compiler is working if you don't use it regularly.) If you don't want
to clutter your environment, see <a href="#Moretools">More on using the
tools</a> for alternatives.</li>
<li><a href="#Configuring">Configure</a> the command-line toolset(s)
you intend to use. It might be a good idea to verify your command
line compiler is working if you don't use it regularly.
<li>Optional: if you intend to build the <a
href="../../libs/python/doc/index.html">Boost.Python</a> library, set
environment variables to configure Boost.Build for your Python
installation. For more information, see these <a
href="../../libs/python/doc/building.html">instructions</a>. If you
leave this step out, Boost.Build will print a message about how to
do it, and will skip the build for Boost.Python.
</ul>
<h2><a name="Building">Building</a> Boost Libraries</h2>
<p>Using your operating system's command line interpreter, execute the following
steps.&nbsp; The sample commands given will work for both UNIX and Windows.</p>
steps. The sample commands given will work for both UNIX and Windows.</p>
<ul>
<li>Change to the Boost root directory.&nbsp; (The directory you unpacked the
<li>Change to the Boost root directory. (The directory you unpacked the
distribution into; unless you changed it, the name will be boost_n_n_n where
n_n_n is the release number.&nbsp; Among others files, it contains c++boost.gif,
and subdirectories boost, libs, more, etc.)</li>
n_n_n is the release number. Among others files, it contains c++boost.gif,
and subdirectories boost, libs, more, etc.)
<blockquote>
<p><code>chdir boost_1_27_0&nbsp; // or whatever release you downloaded</code></p>
<p><code>chdir&nbsp;boost_1_28_0&nbsp;&nbsp;</code> <i>(or whatever release you downloaded)</i>
</blockquote>
<li>Build the Boost libraries for your <a href="#Tools">tools</a>. The example
is for the GNU and Metrowerks compilers.</li>
<li>Invoke the build system, specifying the <a
href="#Tools">toolset</a>(s) you wish to use. The example is for
the GNU and Metrowerks compilers. For more sophisticated jam
invocation options, see this <a
href="build_system.htm#initiating">documentation</a>.
<blockquote>
<p><code>bjam&nbsp;-sTOOLS=&quot;gcc&nbsp;metrowerks&quot;</code></p>
<p><code>bjam&nbsp;&quot;-sTOOLS=gcc&nbsp;metrowerks&quot;</code></p>
</blockquote>
</ul>
<h2><a name="Moretools">More on using the tools</a></h2>
<h2><a name="Configuring">Configuring the tools</a></h2>
<p>The build system's toolsets are designed to work in either of two ways:</p>
<ol>
<li>The user sets up all of the environment for each toolset he wants to use,
in the normal way. For example, for Microsoft VC++, ...vc98/bin is in the
path, vcvars32.bat or equivalent has been invoked, etc. For Metrowerks
CodeWarrior, cwenv.bat or equivalent has been called and ...Other Metrowerks
Tools/Command Line Tools is in the path.<br>
<li>The user sets up all of the environment for each toolset he
wants to use in the normal way. For example, for Microsoft VC++,
...vc98/bin is in the path, vcvars32.bat or equivalent has been
invoked, etc. For Metrowerks CodeWarrior, cwenv.bat or equivalent
has been called and ...Other Metrowerks Tools/Command Line Tools
is in the path. Many Unix operating systems come preconfigured
this way and require no user intervention.<br>
<br>
</li>
<li>The user doesn't want his environment cluttered with this junk and wants
to avoid the many other things done by the vendor's script files. Instead,
he or she sets variables which point to the toolset installation directories
(possibly in the Jamrules, or a user-setup.jam file invoked by the Jamrules).
These variables are used by the build system to locate the tools and invoke
the necessary setup. They are described in the comments in each toolset's
.jam file.</li>
<li>The user doesn't want his environment cluttered with settings or
has non-standard installations for some of his tools. Instead, he
or she sets variables which point to the toolset installation
directories, either in the command shell environment or on the
<code>bjam</code> command-line. These variables are used by the
build system to locate the tools and invoke the necessary
setup.
</ol>
<h2><a name="Tools">Tools</a> available</h2>
<h2><a name="Tools">Supported Toolsets</a></h2>
The following toolsets are supported by Boost.Build. For information
about <a href="#Configuring">configuring</a> each toolset, click its name in the leftmost
column.
<table border="1" cellpadding="5">
<tr>
<td><b>TOOLS Name</b></td>
@@ -110,79 +122,163 @@ steps.&nbsp; The sample commands given will work for both UNIX and Windows.</p>
</tr>
<tr>
<td><code><a href="borland-tools.html">borland</a></code></td>
<td>Borland command line compiler tools</td>
<td><a href="http://www.borland.com/bcppbuilder/freecompiler">Borland</a> C++</td>
</tr>
<tr>
<td><code><a href="como-tools.html">como</a></code></td>
<td>Comeau command line compiler tools</td>
<td><a href="http://www.comeaucomputing.com">Comeau C++</a> compiler front-end for Windows,
using Microsoft <a href="http://msdn.microsoft.com/visualc/">Visual C++</a>as a back-end.</td>
</tr>
<tr>
<td><code><a href="gcc-tools.html">gcc</a></code></td>
<td>GNU GCC command line compiler tools</td>
<td><a href="http://gcc.gnu.org">GNU GCC</a> on Unix and <a href="http://www.cygwin.com">Cygwin</a>.</td>
</tr>
<tr>
<td><code><a href="gcc-stlport-tools.html">gcc-stlport</a></code></td>
<td>GNU GCC command line compiler tools, using the STLport library</td>
<td><a href="http://gcc.gnu.org">GNU GCC</a> on Unix and <a
href="http://www.cygwin.com">Cygwin</a>, using the <a
href="http://www.stlport.org">STLport</a> standard library
implementation</td>
</tr>
<tr>
<td><code>intel-win32</code></td>
<td>Intel command line compiler tools under Win32 using the
Microsoft library</td>
<td><code><a href="gcc-nocygwin-tools.html">gcc-nocygwin</a></code></td>
<td>GNU GCC Cygwin command line compiler tools running in
&quot;no-cygwin&quot; mode, using the <a href="http://www.stlport.org">STLport</a>
standard library implementation (produces commercially redistributable
objects)</td>
</tr>
<tr>
<td><code>intel-linux</code></td>
<td>Intel command line compiler tools under Linux</td>
<td><code><a href="intel-win32-tools.html">intel-win32</a></code></td>
<td><a
href="http://www.intel.com/software/products/compilers/c60/">Intel
C++ for Windows</a> using the Dinkumware standard library in the Intel-required Microsoft
<a href="http://msdn.microsoft.com/visualc/">Visual C++</a> 6 or 7
installation</td>
</tr>
<tr>
<td><code>kcc</code></td>
<td>KAI command line compiler tools</td>
<td><code><a href="intel-linux-tools.html">intel-linux</a></code></td>
<td><a href="http://www.intel.com/software/products/compilers/c60l/">Intel C++ for Linux</a></td>
</tr>
<tr>
<td><code>metrowerks</code></td>
<td>Metrowerks CodeWarrior command line compiler tools</td>
<td><code><a href="kcc-tools.html">kcc</a></code></td>
<td><a href="http://developer.intel.com/software/products/kcc/">KAI C++</a></td>
</tr>
<tr>
<td><code>msvc</code></td>
<td>Microsoft Visual C++ command line compiler tools</td>
<td><code><a href="metrowerks-tools.html">metrowerks</a></code></td>
<td><a href="http://www.metrowerks.com">Metrowerks CodeWarrior</a> command-line tools</td>
</tr>
<tr>
<td><code>msvc-stlport</code></td>
<td>Microsoft Visual C++ command line compiler tools, using the STLport library</td>
<td><code><a href="mingw-tools.html">mingw</a></code></td>
<td>GNU GCC and associated tools in <a
href="http://www.mingw.org">MinGW</a> configuration (produces
commercially redistributable objects)</td>
</tr>
<tr>
<td><code>vacpp</code></td>
<td>IBM Visual Age C++ command line compiler tools</td>
<td><code><a href="mipspro-tools.html">mipspro</a></code></td>
<td>SGI <a href="http://www.sgi.com/developers/devtools/languages/mipspro.html">
MIPSpro C and C++</a></td>
</tr>
<tr>
<td><code><a href="mipspro-tools.html">mipspro</a></code></td>
<td>SGI <a href="http://www.sgi.com/developers/devtools/languages/mipspro.html">
MIPSpro C and C++</a></td>
</tr>
<tr>
<td><code><a href="msvc-tools.html">msvc</a></code></td>
<td>Microsoft <a href="http://msdn.microsoft.com/visualc/">Visual
C++</a> command-line tools.</td>
</tr>
<tr>
<td><code><a href="msvc-stlport-tools.html">msvc-stlport</a></code></td>
<td>Microsoft <a href="http://msdn.microsoft.com/visualc/">Visual
C++</a> command-line tools, using the <a
href="http://www.stlport.org">STLport</a> standard library
implementation</td>
</tr>
<tr>
<td><code><a href="tru64cxx-tools.html">tru64cxx</a></code></td>
<td><a href="http://www.tru64unix.compaq.com/cplus/">Compaq C++</a>
for Tru64 UNIX (versions prior to 6.5)</td>
</tr>
<tr>
<td><code><a href="tru64cxx-tools.html">tru64cxx65</a></code></td>
<td><a href="http://www.tru64unix.compaq.com/cplus/">Compaq C++</a>
Version 6.5 for Tru64 UNIX</td>
</tr>
<tr>
<td><code><a href="vacpp-tools.html">vacpp</a></code></td>
<td><a href="http://www-3.ibm.com/software/ad/vacpp/">IBM Visual
Age C++</a> command-line tools</td>
</tr>
<tr>
<td><code><a href="vc7-tools.html">vc7</a></code></td>
<td>Microsoft <a href="http://msdn.microsoft.com/visualc/">Visual
C++</a> command-line tools, in case you are using the <a
href="msvc-tools.html"><code>msvc</code></a> toolset for a <a
href="http://msdn.microsoft.com/visualc/productinfo/previous/default.asp">Visual
C++ 6.x</a>.</td>
</tr>
</table>
<p>Unless otherwise specified, the library is assumed to be the one shipped with
the compiler.</p>
<p>Additional tools can be supplied by adding an appropriate xxxx-tools.jam file
to the tools/build subdirectory, where xxxx is the name of the tool being
added.&nbsp; If you write an additional toolset file, please submit it to Boost
added. If you write an additional toolset file, please submit it to Boost
so others may benefit from your work.</p>
<h2>Boost.<a name="Jam">Jam</a> executable</h2>
<p>Pre-built Boost.Jam executables are available for the following platforms:</p>
<ul>
<li><a href="http://boost.sourceforge.net/jam-executables/bin.hpux/jam.gz">
<li><a href="http://boost.sourceforge.net/jam-executables/bin.hpux/bjam.gz">
HPUX</a> </li>
<li><a href="http://boost.sourceforge.net/jam-executables/bin.aix/jam.gz">
<li><a href="http://boost.sourceforge.net/jam-executables/bin.aix/bjam.gz">
IBM Aix</a> </li>
<li>
<a href="http://boost.sourceforge.net/jam-executables/bin.linuxx86/jam.gz">
<a href="http://boost.sourceforge.net/jam-executables/bin.linuxx86/bjam.gz">
Linux-x86</a> </li>
<li>
<a href="http://boost.sourceforge.net/jam-executables/boost-build.win.zip">
Microsoft Windows</a> (includes Boost.Build files and boost-build helper
program).</li>
<li><a href="http://boost.sourceforge.net/jam-executables/bin.irix/jam.gz">
<a href="http://boost.sourceforge.net/jam-executables/bin.ntx86/bjam.zip">
Microsoft Windows</a>
<li><a href="http://boost.sourceforge.net/jam-executables/bin.irix/bjam.gz">
SGI Irix</a> </li>
<li>
<a href="http://boost.sourceforge.net/jam-executables/bin.solaris/jam.gz">
<a href="http://boost.sourceforge.net/jam-executables/bin.solaris/bjam.gz">
SUN Solaris</a> </li>
<li>
<a href="http://boost.sourceforge.net/jam-executables/bin.osf/jam.gz">
<a href="http://boost.sourceforge.net/jam-executables/bin.osf/bjam.gz">
Compaq Tru64</a> </li>
<li>
<a href="http://boost.sourceforge.net/jam-executables/bin.linuxppc/bjam.gz">
Linux-PPC</a> </li>
</ul>
<p>RedHat Linux RPM packages are available:</p>
<ul>
@@ -221,11 +317,11 @@ the Boost.Jam executable yourself:</p>
libraries created by the initial make in the <tt>jam_src</tt> directory.
</ul>
<hr>
<p>Revised <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->09 May, 2002<!--webbot bot="Timestamp" i-checksum="40401" endspan -->
<p>Revised <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->15 May, 2002<!--webbot bot="Timestamp" i-checksum="13973" endspan -->
</p>
<p>&copy; Copyright 2001 Beman Dawes</p>
<p>&nbsp;</p>
</body>
</html>
</html>

View File

@@ -21,7 +21,7 @@
<h2>Introduction</h2>
<p>Boost.Build's <a href="http://www.intel.com/software/products/compilers/c60/">intel-linux</a> toolset supports the
<p>Boost.Build's <a href="http://www.intel.com/software/products/compilers/c60l/">intel-linux</a> toolset supports the
Intel C++ Compiler for Linux.
<h2>Configuration Variables</h2>

View File

@@ -21,13 +21,11 @@
<h2>Introduction</h2>
<p>Boost.Build's <a href="kcc-tools.html">kcc</a> toolset supports the
<p>Boost.Build's <a href="http://developer.intel.com/software/products/kcc/">kcc</a> toolset supports the
Intel KAI C++ Compiler.
<p><b>WARNING:</b> This compiler is no longer being distributed by Intel, see the
<a href="http://developer.intel.com/software/products/kcc/announcement.htm">announcement</a> for details.
And our support for it is questionable. We would love it if someone out there with this
compiler would give us feedback on this support.
<h2>Configuration Variables</h2>

View File

@@ -4,16 +4,10 @@
# express or implied warranty, and with no claim as to its suitability
# for any purpose.
# This file is /NOT/ up-to-date; please use other toolset description
# files as examples.
#
# I've tried to bring it up-to-date. -jsiek
flags kcc CFLAGS <debug-symbols>on : -g ;
flags kcc LINKFLAGS <debug-symbols>on : -g ;
flags gcc LINKFLAGS <debug-symbols>off : -s ;
flags kcc LINKFLAGS <debug-symbols>off : -s ;
flags kcc CFLAGS <optimization>off : +K0 ;
flags kcc CFLAGS <optimization>speed : +K2 ;
@@ -36,8 +30,9 @@ flags kcc NEEDLIBS <library-file> ;
flags kcc FINDLIBS <find-library> ;
kcc.bin-directory = [ conditional $(kcc.root-directory) : $(kcc.root-directory)$(SLASH)bin$(SLASH) : " " ] ;
detect-build-tools kcc : "KCC" ;
set-as-singleton kcc.root-directory ;
kcc.bin-directory = $(kcc.root-directory)$(SLASH)bin$(SLASH) ;
kcc.bin-directory ?= " " ;
#### Link ####
@@ -83,6 +78,6 @@ rule Archive-action
actions updated together piecemeal kcc-Archive-action
{
KCC -g $(ARFLAGS) -o "$(<)" "$(>)"
$(kcc.bin-directory)KCC -g $(ARFLAGS) -o "$(<)" "$(>)"
}

View File

@@ -20,7 +20,7 @@
#//<a href="http://www.metrowerks.com/products/windows/">Metro-<br>werks<br>Code-<br>Warrior</a>
# singleton variables...
set-as-singleton METROWERKS_ROOT METROWERKS_INCLUDE_ROOT CWFOLDER ;
set-as-singleton METROWERKS_ROOT CWFOLDER ;
# Get these variable set on the targets so that we can re-use the
# build actions for other toolsets using this one as a base.

View File

@@ -26,7 +26,7 @@ SGI MIPSpro C and C++ compilers.
<h2>Configuration Variables</h2>
The como toolset responds to the following variables which can be set in the
The mipspro toolset responds to the following variables which can be set in the
environment or configured on the jam command-line using
<code>-s<i>VARIABLE_NAME</i>=</code><i>value</i>:

150
v1/msvc-stlport-tools.html Normal file
View File

@@ -0,0 +1,150 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="boost.css">
<title>Boost.Build - msvc-stlport toolset</title>
</head>
<body link="#0000ff" vlink="#800080">
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
"header">
<tr>
<td valign="top" width="300">
<h3><a href="http://www.boost.org"><img height="86" width="277" alt="C++ Boost" src="../../c++boost.gif" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center">Boost.Build</h1>
<h2 align="center">msvc-stlport toolset</h2>
</td>
</tr>
</table>
<hr>
<h2>Introduction</h2>
<p>Boost.Build's <a
href="http://msdn.microsoft.com/visualc/">msvc-stlport</a> toolset
supports the <td>Microsoft <a
href="http://msdn.microsoft.com/visualc/">Visual C++</a> command-line
tools, using the <a href="http://www.stlport.org">STLport</a> standard
library implementation on Microsoft Windows. It is designed to allow
you to build and test with multiple installed versions of STLPort, so
that objects build in each configuration will be built into separate
directories.
<h2><a name="configuration">Configuration Variables</a></h2>
The <code>msvc</code> toolset responds to the following variables,
which can be set in the environment or configured on the jam
command-line using
<code>-s<i>VARIABLE_NAME</i>=</code><i>value</i>. It is an extension
of the <a href="msvc-tools.html">msvc toolset</a> and therefore
responds to all of the MSVC <a
href="msvc-tools.html#configuration">configuration variables</a> in
addition to those listed below.
<p>In the table below, <i>version</i> corresponds to an
STLPort version number, e.g. &quot;<code>4.5.3</code>&quot;.
<table border="1">
<tr><th>Variable Name <th>Semantics <th>Default <th>Notes
<tr>
<td><code>STLPORT_PATH</code>
<td>A directory containing at least one subdirectory of the form
<code>/STLPort-</code><i>version</i> where an STLPort
installation can be found.
<td><i>empty</i>
<td>Allows easy configuration for an installation where
several STLPort versions are installed under a single directory.
<tr>
<td><code>STLPORT_</code><i>version</i><code>_PATH</code>
<td>The directory where the specific STLPort <i>version</i>
installation can be found, in case there is no central
location appropriate for <code>STLPORT_PATH</code>, above, or
a particular version's installation is not located in the
usual place.
<td><i>empty</i>
<td>Allows configuration of a specific STLPort installation.
<tr>
<td><code>STLPORT_VERSION</code>
<td>The version of STLPort in use by default.
<td><code>4.5.3</code>
<td>Other values can be selected in parallel setting the <a
href="build_system.htm#initiating">build property</a>
&lt;stlport-version&gt; to values from the list of
<code>$(STLPORT_VERSIONS)</code>
<tr>
<td><code>STLPORT_VERSIONS</code>
<td>A space-separated list of alternate versions of STLport available on this machine.
<td><code>4.5&nbsp;4.0</code>
</table>
<h2><a name="features">Toolset-Specific Features</a></h2>
The following <code>msvc-stlport</code>-specific <a
href="build_system.htm#features">features</a> can be used in target build
requirements or in the <a href="build_system.htm#initiating"><code>BUILD</code></a> variable:
<table border="1">
<tr><th>Feature <th>Values <th>Default <th>Semantics
<tr>
<td><code>stlport-iostream</code>
<td><code>off on</code>
<td><code>off</code>
<td>Controls whether STLPort's own iostreams are in use. Though
this setting is <code>off</code> by default to save users from
having to build STLPort, we strongly recommend <code>on</code>
instead.
<tr>
<td><code>stlport-version</code>
<td><code>$(STLPORT_VERSION)&nbsp;$(STLPORT_VERSIONS)</code> (see above)
<td><code>$(STLPORT_VERSION)</code>
<td>Selects a version of STLPort for each target
<tr>
<td><code>stlport-cstd-namespace</code>
<td><code>std global</code>
<td><code>std</code>
<td>Controls whether or not names from the &quot;C&quot; library
headers such as &lt;cstdlib&gt; are imported into <code>namespace
std</code>.
</table>
<hr>
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
14 May, 2002
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href="../../people/dave_abrahams.htm">Dave Abrahams</a>
2002. All Rights Reserved.</i></p>
</body>
</html>

View File

@@ -84,8 +84,8 @@ rule get-stlport-root
ECHO ;
ECHO STLPORT_VERSIONS - Alternate versions of STLport available on this machine. Defaults to \"4.5 4.0\". ;
ECHO ;
ECHO "Note that STLPort iostreams are /not/ in use by default. To enable them, you must place"
ECHO " <stlport-iostream>on in your BUILD variable or in target requirements."
ECHO "Note that STLPort iostreams are /not/ in use by default. To enable them, you must place" ;
ECHO " <stlport-iostream>on in your BUILD variable or in target requirements." ;
EXIT ;
}

69
v1/msvc-tools.html Normal file
View File

@@ -0,0 +1,69 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="boost.css">
<title>Boost.Build - msvc toolset</title>
</head>
<body link="#0000ff" vlink="#800080">
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
"header">
<tr>
<td valign="top" width="300">
<h3><a href="http://www.boost.org"><img height="86" width="277" alt="C++ Boost" src="../../c++boost.gif" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center">Boost.Build</h1>
<h2 align="center">msvc toolset</h2>
</td>
</tr>
</table>
<hr>
<h2>Introduction</h2>
<p>Boost.Build's <a href="http://msdn.microsoft.com/visualc/">msvc</a>
toolset supports the Microsoft Visual C++ command-line tools on
Microsoft Windows. It supports any version of Visual C++, but in case
you have more than one version of Visual C++ installed, and you want
to use both, the additional <a href="vc7-tools.html">vc7</a> toolset
can be used for Visual C++ 7.0.
<h2><a name="configuration">Configuration Variables</a></h2>
The <code>msvc</code> toolset responds to the following variables, which can be set in the
environment or configured on the jam command-line using
<code>-s<i>VARIABLE_NAME</i>=</code><i>value</i>:
<table border="1">
<tr><th>Variable Name <th>Semantics <th>Default <th>Notes
<tr>
<td><code>MSVC_ROOT</code>
<td>The path to the MSVC installation directory
<td><code>c:\Program&nbsp;Files\Microsoft&nbsp;Visual&nbsp;C++\VC98</code>
<td>If <code>MSVCDir</code> is set in the environment, the toolset
will assume <code>VCVARS32.BAT</code>has already been called, and
will ignore this variable.
<tr>
<td><code>VISUALC</code>
<td>The path to the MSVC installation directory
<td><code>c:\Program&nbsp;Files\Microsoft&nbsp;Visual&nbsp;C++\VC98</code>
<td>If <code>MSVCDir</code> or <code>MSVC_ROOT</code> is set in
the environment, the toolset will assume
<code>VCVARS32.BAT</code>has already been called, and will ignore
this variable.
</table>
<hr>
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
14 May, 2002
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href="../../people/dave_abrahams.htm">Dave Abrahams</a>
2002. All Rights Reserved.</i></p>
</body>
</html>

View File

@@ -24,23 +24,36 @@ flags msvc VC_PDB_NAME ;
# compute MSVC tool path
# You can either put the msvc bin directory in your PATH, or you can set
# MSVCDir to point at the msvc installation directory
# Some installations set MSVCDIR instead of MSVCDir; who knows why?
MSVCDir ?= $(MSVCDIR) ;
# If MSVCDir is not set the user hasn't run VCVARS32.BAT
if ! $(MSVCDir)
{
# In case someone set VISUALC in order to build Jam, we can just use that.
MSVC_ROOT ?= $(VISUALC) ;
# Otherwise, guess a standard installation directory
MSVC_ROOT ?= "C:\\Program Files\\Microsoft Visual C++\\VC98" ;
VC_TOOL_PATH ?= "$(MSVC_ROOT)"$(SLASH)bin$(SLASH) ;
VC_SETUP ?= "CALL \"$(VC_TOOL_PATH)VCVARS32.BAT\" >nul" ;
# Reconstitutes paths containing spaces
MSVC_ROOT = $(MSVC_ROOT:J=" ") ;
# The tools are provisionallly located in the msvc6 bin
# directory. This may be overridden by toolsets which extend this
# one.
VC_TOOL_PATH = "$(MSVC_ROOT)"$(SLASH)bin$(SLASH) ;
# Always call VCVARS32.BAT before invoking the tools
VC_SETUP = "CALL \"$(VC_TOOL_PATH)VCVARS32.BAT\" >nul" ;
}
else
{
# This hack reconstitutes paths containing spaces as long as
# they don't contain any consecutive spaces.
while $(MSVCDir[2])
{
MSVCDir = $(MSVCDir[1])" "$(MSVCDir[2]) $(MSVCDir[3-]) ;
}
# Reconstitutes paths containing spaces
MSVCDir = $(MSVCDir:J=" ") ;
VC_TOOL_PATH ?= "" ; # Don't clobber adjoining text if MSVCDir is already set
# Don't clobber adjoining text or use explicit paths if MSVCDir is already set
VC_TOOL_PATH = "" ;
}
VC_COMPILER = cl ;

View File

@@ -28,6 +28,9 @@ if $(NT)
{
PYTHON_ROOT ?= c:/tools/python ;
# Reconstitute any paths split due to embedded spaces.
PYTHON_ROOT = $(PYTHON_ROOT:J=" ") ;
PYTHON_LIB_PATH ?= $(PYTHON_ROOT)/libs $(PYTHON_ROOT)/PCBuild ;
PYTHON_STDLIB_PATH ?= $(PYTHON_ROOT)/Lib ;
@@ -60,6 +63,7 @@ else if $(UNIX)
{
PYTHON_VERSION ?= 1.5 ;
PYTHON_ROOT ?= /usr/local ;
PYTHON_ROOT = $(PYTHON_ROOT:J=" ") ;
PYTHON_INCLUDES ?= $(PYTHON_ROOT)/include/python$(PYTHON_VERSION) ;
PYTHON_LIB_PATH ?= $(PYTHON_ROOT)/lib/python$(PYTHON_VERSION)/config ;
PYTHON_STDLIB_PATH ?= $(PYTHON_ROOT)/lib/python$(PYTHON_VERSION) ;
@@ -291,15 +295,12 @@ rule boost-python-runtest (
# declare the two subsidiary tests.
declare-local-target $(<) : $(>) : $(PYTHON_PROPERTIES) : $(4) : PYTHON_TEST ;
declare-local-target $(<) : $(>) : $(PYTHON_PROPERTIES) : $(4) : PYTHON_RUNTEST ;
declare-local-target $(<) : $(>) : $(PYTHON_PROPERTIES) : $(4) <suppress>true : PYTHON_RUNTEST ;
}
rule boost-python-test ( name : sources + : requirements * : default-BUILD * )
{
type-DEPENDS test : $(name) ;
local gSUPPRESS_FAKE_TARGETS = true ;
extension $(name) : $(sources) : $(requirements) : $(4) ;
extension $(name) : $(sources) : $(requirements) <suppress>true : $(4) ;
}
# special rules for two new target types: PYTHON_TEST and PYTHON_RUNTEST.

View File

@@ -43,14 +43,6 @@ and don't need to be manipulated by the user. </p>
<th valign="top">Notes<br>
</th>
</tr>
<tr>
<td valign="top"><code>AR</code><br>
</td>
<td valign="top">Command for archiving object files.<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>AS</code><br>
</td>
@@ -75,14 +67,6 @@ and don't need to be manipulated by the user. </p>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>BINDIR</code><br>
</td>
<td valign="top">Directory to install binary/executable files.<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>CHMOD</code><br>
</td>
@@ -105,15 +89,6 @@ and don't need to be manipulated by the user. </p>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>CW</code><br>
</td>
<td valign="top">Location of CodeWarrior installation. This is a virtual
location that can be overriden.<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>DLLMODE</code><br>
</td>
@@ -238,22 +213,6 @@ generate.<br>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>LIBDIR</code><br>
</td>
<td valign="top">Directory to install link library files.<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>LINKLIBS</code><br>
</td>
<td valign="top">? (VMS)<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>LN</code><br>
</td>
@@ -262,22 +221,6 @@ generate.<br>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>MACHDRS</code><br>
</td>
<td valign="top">List of directories of headers for MacOS development.<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>MACLIBS</code><br>
</td>
<td valign="top">List of link libraries for MacOS development.<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>MANDIR</code><br>
</td>
@@ -286,22 +229,6 @@ generate.<br>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>MPWLIBS</code><br>
</td>
<td valign="top">List of link libraries for MacOS-MPW development.<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>MPWNLLIBS</code><br>
</td>
<td valign="top">List of link libraries for MacOS-MPW with NL development.<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>MKDIR</code><br>
</td>
@@ -323,23 +250,6 @@ generate.<br>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>NOARUPDATE</code><br>
</td>
<td valign="top">Platform archive command does not support individual
updates.<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>OPTIM</code><br>
</td>
<td valign="top">Default flags for turning optimization on.<br>
</td>
<td valign="top">Obsolete.<br>
</td>
</tr>
<tr>
<td valign="top"><code>OSFULL</code><br>
</td>
@@ -372,14 +282,6 @@ and version.<br>
<td valign="top">Set to empty ("") if there is no command.<br>
</td>
</tr>
<tr>
<td valign="top"><code>RCP</code><br>
</td>
<td valign="top">Remote copy.<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>RELOCATE</code><br>
</td>
@@ -396,22 +298,6 @@ support placing generated object files, so we must move them.<br>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>RSH</code><br>
</td>
<td valign="top">Remote shell.<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>RUNVMS</code><br>
</td>
<td valign="top">? (VMS)<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>SED</code><br>
</td>
@@ -454,22 +340,6 @@ support placing generated object files, so we must move them.<br>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>SIOUXHDRS</code><br>
</td>
<td valign="top">List of directories of headers for MacOS-SIOUX development.<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>SIOUXLIBS</code><br>
</td>
<td valign="top">List of link libraries for MacOS-SIOUS development.<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>SLASH</code><br>
</td>
@@ -531,21 +401,6 @@ a list of paths.</td>
<td valign="top">Includes any "." as needed.<br>
</td>
</tr>
<tr>
<td valign="top"><code>UNDEFFLAG</code><br>
</td>
<td valign="top">Command flag to undefine specific symbols.<br>
</td>
<td valign="top">Obsolete.</td>
</tr>
<tr>
<td valign="top"><code>WATCOM</code><br>
</td>
<td valign="top">Set to the root of the Watcom installation on OS2.<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>YACC</code><br>
</td>
@@ -584,7 +439,7 @@ generate.<br>
<hr>
<p>Revised <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
06 May, 2002 <!--webbot bot="Timestamp" endspan i-checksum="39359" -->
14 May, 2002 <!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href="../../people/dave_abrahams.htm">

View File

@@ -62,11 +62,12 @@ above covers most of it.
where the user wants to declare a project-id.
</blockquote>
<h3>Initialization</h3>
<h3><a name="initialization">Initialization</a></h3>
<p>
We check the name used to invoke Jam, and if the name is not the recognized
Boost.Jam invocation we continue with the execution of the builtin <tt>Jambase</tt>.
We check the name used to invoke Jam, and if the name is not the
recognized Boost.Jam invocation (&quot;<code>bjam</code>&quot;) we
continue with the execution of the builtin <tt>Jambase</tt>.
</p>
<p>

View File

@@ -0,0 +1,2 @@
# The presence of this file emulates the Boost 1.27.0 release
include $(BOOST_ROOT)/tools/build/bootstrap.jam ;

View File

@@ -43,14 +43,6 @@ and don't need to be manipulated by the user. </p>
<th valign="top">Notes<br>
</th>
</tr>
<tr>
<td valign="top"><code>AR</code><br>
</td>
<td valign="top">Command for archiving object files.<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>AS</code><br>
</td>
@@ -75,14 +67,6 @@ and don't need to be manipulated by the user. </p>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>BINDIR</code><br>
</td>
<td valign="top">Directory to install binary/executable files.<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>CHMOD</code><br>
</td>
@@ -105,15 +89,6 @@ and don't need to be manipulated by the user. </p>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>CW</code><br>
</td>
<td valign="top">Location of CodeWarrior installation. This is a virtual
location that can be overriden.<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>DLLMODE</code><br>
</td>
@@ -238,22 +213,6 @@ generate.<br>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>LIBDIR</code><br>
</td>
<td valign="top">Directory to install link library files.<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>LINKLIBS</code><br>
</td>
<td valign="top">? (VMS)<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>LN</code><br>
</td>
@@ -262,22 +221,6 @@ generate.<br>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>MACHDRS</code><br>
</td>
<td valign="top">List of directories of headers for MacOS development.<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>MACLIBS</code><br>
</td>
<td valign="top">List of link libraries for MacOS development.<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>MANDIR</code><br>
</td>
@@ -286,22 +229,6 @@ generate.<br>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>MPWLIBS</code><br>
</td>
<td valign="top">List of link libraries for MacOS-MPW development.<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>MPWNLLIBS</code><br>
</td>
<td valign="top">List of link libraries for MacOS-MPW with NL development.<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>MKDIR</code><br>
</td>
@@ -323,23 +250,6 @@ generate.<br>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>NOARUPDATE</code><br>
</td>
<td valign="top">Platform archive command does not support individual
updates.<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>OPTIM</code><br>
</td>
<td valign="top">Default flags for turning optimization on.<br>
</td>
<td valign="top">Obsolete.<br>
</td>
</tr>
<tr>
<td valign="top"><code>OSFULL</code><br>
</td>
@@ -372,14 +282,6 @@ and version.<br>
<td valign="top">Set to empty ("") if there is no command.<br>
</td>
</tr>
<tr>
<td valign="top"><code>RCP</code><br>
</td>
<td valign="top">Remote copy.<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>RELOCATE</code><br>
</td>
@@ -396,22 +298,6 @@ support placing generated object files, so we must move them.<br>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>RSH</code><br>
</td>
<td valign="top">Remote shell.<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>RUNVMS</code><br>
</td>
<td valign="top">? (VMS)<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>SED</code><br>
</td>
@@ -454,22 +340,6 @@ support placing generated object files, so we must move them.<br>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>SIOUXHDRS</code><br>
</td>
<td valign="top">List of directories of headers for MacOS-SIOUX development.<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>SIOUXLIBS</code><br>
</td>
<td valign="top">List of link libraries for MacOS-SIOUS development.<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>SLASH</code><br>
</td>
@@ -531,21 +401,6 @@ a list of paths.</td>
<td valign="top">Includes any "." as needed.<br>
</td>
</tr>
<tr>
<td valign="top"><code>UNDEFFLAG</code><br>
</td>
<td valign="top">Command flag to undefine specific symbols.<br>
</td>
<td valign="top">Obsolete.</td>
</tr>
<tr>
<td valign="top"><code>WATCOM</code><br>
</td>
<td valign="top">Set to the root of the Watcom installation on OS2.<br>
</td>
<td valign="top"><br>
</td>
</tr>
<tr>
<td valign="top"><code>YACC</code><br>
</td>
@@ -584,7 +439,7 @@ generate.<br>
<hr>
<p>Revised <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
06 May, 2002 <!--webbot bot="Timestamp" endspan i-checksum="39359" -->
14 May, 2002 <!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href="../../people/dave_abrahams.htm">