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

Merge from trunk

[SVN r59728]
This commit is contained in:
Vladimir Prus
2010-02-17 09:49:08 +00:00
parent fe8c5f7172
commit dabe7b047f
21 changed files with 473 additions and 122 deletions

View File

@@ -238,6 +238,12 @@ local rule load-config ( module-name : filename : path + : must-find ? )
"$(filename)" "from" $(where) "." ;
}
# Set source location so that path-constant in config files
# with relative paths work. This is of most importance
# for project-config.jam, but may be used in other
# config files as well.
local attributes = [ project.attributes $(module-name) ] ;
$(attributes).set source-location : $(where:D) : exact ;
modules.load $(module-name) : $(filename) : $(path) ;
project.load-used-projects $(module-name) ;
}
@@ -898,6 +904,21 @@ local rule should-clean-project ( project )
modules.poke : PARALLELISM : $(j) ;
}
local k = [ option.get keep-going : true : true ] ;
if $(k) in "on" "yes" "true"
{
modules.poke : KEEP_GOING : 1 ;
}
else if $(k) in "off" "no" "false"
{
modules.poke : KEEP_GOING : 0 ;
}
else
{
ECHO "error: Invalid value for the --keep-going option" ;
EXIT ;
}
# The 'all' pseudo target is not strictly needed expect in the case when we
# use it below but people often assume they always have this target
# available and do not declare it themselves before use which may cause

View File

@@ -469,7 +469,9 @@ rule validate-value-string ( feature value-string )
if $($(feature).subfeatures)
{
if ! ( $(value-string) in $($(feature).subfeatures) ) {
if ! ( $(value-string) in $($(feature).values) )
&& ! ( $(value-string) in $($(feature).subfeatures) )
{
values = [ regex.split $(value-string) - ] ;
}
}

View File

@@ -59,7 +59,7 @@ rule load ( jamfile-location )
# If Jamfile is already loaded, don't try again.
if ! $(module-name) in $(.jamfile-modules)
{
load-jamfile $(jamfile-location) ;
load-jamfile $(jamfile-location) : $(module-name) ;
# We want to make sure that child project are loaded only after parent
# projects. In particular, because parent projects define attributes
@@ -277,6 +277,7 @@ rule find-jamfile (
#
local rule load-jamfile (
dir # The directory of the project Jamfile.
: jamfile-module
)
{
# See if the Jamfile is where it should be.
@@ -293,10 +294,6 @@ local rule load-jamfile (
: "Filenames are: " $(jamfile-to-load:D=) ;
}
# The module of the Jamfile.
#
local jamfile-module = [ module-name [ path.parent $(jamfile-to-load) ] ] ;
# Initialize the Jamfile module before loading.
#
initialize $(jamfile-module) : [ path.parent $(jamfile-to-load) ]
@@ -1035,6 +1032,16 @@ module project-rules
}
}
rule always ( target-names * )
{
import project ;
local t = [ project.current ] ;
for local n in $(target-names)
{
$(t).mark-target-as-always $(n) ;
}
}
rule glob ( wildcards + : excludes * )
{
import project ;

View File

@@ -303,6 +303,13 @@ class project-target : abstract-target
# before main target instances are created.
self.explicit-targets += $(target-name) ;
}
rule mark-target-as-always ( target-name )
{
# Record the name of the target, not instance, since this rule is called
# before main target instances are created.
self.always-targets += $(target-name) ;
}
# Add new target alternative
#
@@ -466,6 +473,11 @@ class project-target : abstract-target
self.main-targets += $(t) ;
target = $(self.main-target.$(name)) ;
}
if $(name) in $(self.always-targets)
{
$(a).always ;
}
$(target).add-alternative $(a) ;
}
@@ -485,7 +497,17 @@ class project-target : abstract-target
local r ;
for local v in $(value)
{
v = [ path.root [ path.make $(v) ] $(self.location) ] ;
local l = $(self.location) ;
if ! $(l)
{
# Project corresponding to config files do not have
# 'location' attribute, but do have source location.
# It might be more reasonable to make every project have
# a location and use some other approach to prevent buildable
# targets in config files, but that's for later.
l = [ get source-location ] ;
}
v = [ path.root [ path.make $(v) ] $(l) ] ;
# Now make the value absolute path.
v = [ path.root $(v) [ path.pwd ] ] ;
# Constants should be in platform-native form.
@@ -1090,7 +1112,12 @@ class basic-target : abstract-target
[ full-name ] ;
}
}
rule always ( )
{
self.always = 1 ;
}
# Returns the list of abstract-targets which are used as sources. The extra
# properties specified for sources are not represented. The only user for
# this rule at the moment is the "--dump-tests" feature of the test system.
@@ -1257,7 +1284,15 @@ class basic-target : abstract-target
{
local gur = $(result[1]) ;
result = $(result[2-]) ;
if $(self.always)
{
for local t in $(result)
{
$(t).always ;
}
}
local s = [ create-subvariant $(result)
: [ virtual-target.recent-targets ]
: $(property-set) : $(source-targets)

View File

@@ -181,6 +181,26 @@ ECHO [ glob-tree *.cpp : .svn ] ;
their containing project is built.</para></listitem>
</varlistentry>
<varlistentry>
<term><literal>always</literal></term>
<indexterm><primary>always building a metatarget</primary></indexterm>
<listitem><para>The <literal>always</literal> funciton takes a single
parameter&#x2014;a list of metatarget names. The top-level targets produced
by the named metatargets will be always considered out of date. Consider this example:
</para>
<programlisting>
exe hello : hello.cpp ;
exe bye : bye.cpp ;
always hello ;
</programlisting>
<para>If a build of <filename>hello</filename> is requested, then the binary will
always be relinked. The object files will not be recompiled, though. Note that if
a build of <filename>hello</filename> is not requested, for example you specify just
<filename>bye</filename> on the command line, <filename>hello</filename> will not
be relinked.</para></listitem>
</varlistentry>
<varlistentry>
<term><literal>constant</literal></term>
@@ -1723,7 +1743,7 @@ exe a : a.cpp
<listitem>
<para><emphasis>dependency</emphasis></para>
<para>The value of dependency feature if a target reference.
<para>The value of a dependency feature is a target reference.
When used for building of a main target, the value of
dependency feature is treated as additional dependency.</para>

View File

@@ -131,7 +131,7 @@ local dont-build = [ option.process ] ;
#
if ! $(dont-build)
{
if ! [ MATCH (--python) : $(ARGV) ]
if ! --python in $(ARGV)
{
# Allow users to override the build system file from the
# command-line (mostly for testing)

View File

@@ -121,6 +121,12 @@ feature.feature asynch-exceptions : off on : propagated ;
feature.feature extern-c-nothrow : off on : propagated ;
feature.feature debug-symbols : on off : propagated ;
# Controls whether the binary should be stripped -- that is have
# everything not necessary to running removed. This option should
# not be very often needed. Also, this feature will show up in
# target paths of everything, not just binaries. Should fix that
# when impelementing feature relevance.
feature.feature strip : off on : propagated ;
feature.feature define : : free ;
feature.feature undef : : free ;
feature.feature "include" : : free path ; #order-sensitive ;

View File

@@ -24,29 +24,11 @@ import errors ;
## Use a framework.
feature framework : : free ;
## The MacOSX versions we can target.
.macosx-versions =
10.6 10.5 10.4 10.3 10.2 10.1
iphone-3.2 iphonesim-3.2
iphone-3.1.2 iphonesim-3.1.2
iphone-3.1 iphonesim-3.1
iphone-3.0 iphonesim-3.0
iphone-2.2.1 iphonesim-2.2.1
iphone-2.2 iphonesim-2.2
iphone-2.1 iphonesim-2.1
iphone-2.0 iphonesim-2.0
iphone-1.x
;
## The MacOSX version to compile for, which maps to the SDK to use (sysroot).
feature macosx-version
: $(.macosx-versions)
: propagated link-incompatible symmetric optional ;
feature macosx-version : : propagated link-incompatible symmetric optional ;
## The minimal MacOSX version to target.
feature macosx-version-min
: $(.macosx-versions)
: propagated optional ;
feature macosx-version-min : : propagated optional ;
#############################################################################
@@ -170,27 +152,27 @@ rule init ( version ? : command * : options * : requirement * )
# We can turn off strip by specifying it as empty. In which
# case we switch to using the linker to do the strip.
flags darwin.link.dll OPTIONS
$(condition)/<main-target-type>LIB/<link>shared/<address-model>32/<debug-symbols>off : -Wl,-x ;
$(condition)/<main-target-type>LIB/<link>shared/<address-model>32/<strip>on : -Wl,-x ;
flags darwin.link.dll OPTIONS
$(condition)/<main-target-type>LIB/<link>shared/<address-model>/<debug-symbols>off : -Wl,-x ;
$(condition)/<main-target-type>LIB/<link>shared/<address-model>/<strip>on : -Wl,-x ;
flags darwin.link OPTIONS
$(condition)/<main-target-type>EXE/<address-model>32/<debug-symbols>off : -s ;
$(condition)/<main-target-type>EXE/<address-model>32/<strip>on : -s ;
flags darwin.link OPTIONS
$(condition)/<main-target-type>EXE/<address-model>/<debug-symbols>off : -s ;
$(condition)/<main-target-type>EXE/<address-model>/<strip>on : -s ;
}
else
{
# Otherwise we need to find a strip program to use. And hence
# also tell the link action that we need to use a strip
# post-process.
flags darwin.link NEED_STRIP $(condition)/<debug-symbols>off : "" ;
flags darwin.link NEED_STRIP $(condition)/<strip>on : "" ;
strip =
[ common.get-invocation-command darwin
: strip : [ feature.get-values <striper> : $(options) ] : $(bin) : search-path ] ;
flags darwin.link .STRIP $(condition) : $(strip[1]) ;
if $(.debug-configuration)
{
ECHO notice: using strip :: $(condition) :: $(strip[1]) ;
ECHO notice: using strip for $(condition) at $(strip[1]) ;
}
}
@@ -202,7 +184,7 @@ rule init ( version ? : command * : options * : requirement * )
flags darwin.archive .LIBTOOL $(condition) : $(archiver[1]) ;
if $(.debug-configuration)
{
ECHO notice: using archiver :: $(condition) :: $(archiver[1]) ;
ECHO notice: using archiver for $(condition) at $(archiver[1]) ;
}
# - Initialize the SDKs available in the root for this tool.
@@ -220,6 +202,94 @@ rule init ( version ? : command * : options * : requirement * )
#~ EXIT ;
}
# Add and set options for a discovered SDK version.
local rule init-sdk ( condition * : root ? : version + : version-feature ? )
{
local rule version-to-feature ( version + )
{
switch $(version[1])
{
case iphone* :
{
return $(version[1])-$(version[2-]:J=.) ;
}
case mac* :
{
return $(version[2-]:J=.) ;
}
case * :
{
return $(version:J=.) ;
}
}
}
if $(version-feature)
{
if $(.debug-configuration)
{
ECHO notice: available sdk for $(condition)/<macosx-version>$(version-feature) at $(sdk) ;
}
# Add the version to the features for specifying them.
if ! $(version-feature) in [ feature.values macosx-version ]
{
feature.extend macosx-version : $(version-feature) ;
}
if ! $(version-feature) in [ feature.values macosx-version-min ]
{
feature.extend macosx-version-min : $(version-feature) ;
}
# Set the flags the version needs to compile with, first
# generic options.
flags darwin.compile OPTIONS $(condition)/<macosx-version>$(version-feature)
: -isysroot $(sdk) ;
flags darwin.link OPTIONS $(condition)/<macosx-version>$(version-feature)
: -isysroot $(sdk) ;
# Then device variation options.
switch $(version[1])
{
case iphone* :
{
flags darwin.compile OPTIONS <macosx-version-min>$(version-feature)
: -miphoneos-version-min=$(version[2-]:J=.) ;
flags darwin.link OPTIONS <macosx-version-min>$(version-feature)
: -miphoneos-version-min=$(version[2-]:J=.) ;
}
case mac* :
{
flags darwin.compile OPTIONS <macosx-version-min>$(version-feature)
: -miphoneos-version-min=$(version[2-]:J=.) ;
flags darwin.link OPTIONS <macosx-version-min>$(version-feature)
: -miphoneos-version-min=$(version[2-]:J=.) ;
}
}
return $(version-feature) ;
}
else if $(version[4])
{
# We have a patch version of an SDK. We want to set up
# both the specific patch version, and the minor version.
# So we recurse to set up the minor version. Plus the minor version.
return
[ init-sdk $(condition) : $(root)
: $(version[1-3]) : [ version-to-feature $(version[1-3]) ] ]
[ init-sdk $(condition) : $(root)
: $(version) : [ version-to-feature $(version) ] ] ;
}
else
{
# Yes, this is intentionally recursive.
return
[ init-sdk $(condition) : $(root)
: $(version) : [ version-to-feature $(version) ] ] ;
}
}
# Determine the MacOSX SDK versions installed and their locations.
local rule init-available-sdk-versions ( condition * : root ? )
{
@@ -231,45 +301,29 @@ local rule init-available-sdk-versions ( condition * : root ? )
{
local sdk-match = [ MATCH ([^0-9]+)([0-9]+)[.]([0-9x]+)[.]?([0-9x]+)? : $(sdk:D=) ] ;
local sdk-platform = $(sdk-match[1]:L) ;
local sdk-version = $(sdk-match[2]).$(sdk-match[3]) ;
local sdk-version = $(sdk-match[2-]) ;
if $(sdk-version)
{
switch $(sdk-platform)
{
case macosx :
{
sdk-version = $(sdk-version) ;
sdk-version = mac $(sdk-version) ;
}
case iphoneos :
{
if $(sdk-match[4])
{
sdk-version = $(sdk-version).$(sdk-match[4]) ;
}
sdk-version = iphone-$(sdk-version) ;
sdk-version = iphone $(sdk-version) ;
}
case iphonesimulator :
{
if $(sdk-match[4])
{
sdk-version = $(sdk-version).$(sdk-match[4]) ;
}
sdk-version = iphonesim-$(sdk-version) ;
sdk-version = iphonesim $(sdk-version) ;
}
case * :
{
sdk-version = $(sdk-version:J=-) ;
}
}
result += $(sdk-version) ;
flags darwin.compile OPTIONS $(condition)/<macosx-version>$(sdk-version)
: -isysroot $(sdk) ;
flags darwin.link OPTIONS $(condition)/<macosx-version>$(sdk-version)
: -isysroot $(sdk) ;
if $(.debug-configuration)
{
ECHO notice: available sdk :: $(condition)/<macosx-version>$(sdk-version) :: $(sdk) ;
}
result += [ init-sdk $(condition) : $(sdk) : $(sdk-version) ] ;
}
}
return $(result) ;
@@ -278,31 +332,6 @@ local rule init-available-sdk-versions ( condition * : root ? )
# Generic options.
flags darwin.compile OPTIONS <flags> ;
# Minimal OSX target option. Note that the default is for the min-version
# option to not be included to let the compiler default take hold.
for local macosx-version in $(.macosx-versions)
{
switch $(macosx-version)
{
case iphone* :
{
local version-match = [ MATCH ([^0-9]+)([0-9.]+) : $(macosx-version) ] ;
flags darwin.compile OPTIONS <macosx-version-min>$(macosx-version)
: -miphoneos-version-min=$(version-match[2]) ;
flags darwin.link OPTIONS <macosx-version-min>$(macosx-version)
: -miphoneos-version-min=$(version-match[2]) ;
}
case * :
{
flags darwin.compile OPTIONS <macosx-version-min>$(macosx-version)
: -mmacosx-version-min=$(macosx-version) ;
flags darwin.link OPTIONS <macosx-version-min>$(macosx-version)
: -mmacosx-version-min=$(macosx-version) ;
}
}
}
# The following adds objective-c support to darwin.
# Thanks to http://thread.gmane.org/gmane.comp.lib.boost.build/13759
@@ -468,12 +497,15 @@ local rule prepare-framework-path ( target + )
# The -F option specifies the directories where a framework
# is searched for. So, if we find <framework> feature
# with some path, we need to generate property -F option.
local framework-path = [ on $(target) return $(FRAMEWORK:D) ] ;
local framework-paths = [ on $(target) return $(FRAMEWORK:D) ] ;
# Be sure to generate no -F if there's no path.
if $(framework-path) != ""
for local framework-path in $(framework-paths)
{
FRAMEWORK_PATH on $(target) += -F$(framework-path) ;
if $(framework-path) != ""
{
FRAMEWORK_PATH on $(target) += -F$(framework-path) ;
}
}
}

View File

@@ -44,9 +44,7 @@ generators.register-standard docutils.html : ReST : HTML ;
rule init ( docutils-dir ? : tools-dir ? )
{
ECHO docutils-dir= $(docutils-dir) ;
docutils-dir ?= [ modules.peek : DOCUTILS_DIR ] ;
ECHO tools-dir= $(tools-dir) ;
tools-dir ?= $(docutils-dir)/tools ;
if ! $(.initialized)

View File

@@ -36,6 +36,7 @@ import toolset : flags ;
import alias ;
import common ;
import modules ;
import project ;
# Use to specify extra configuration paramters. These get translated
@@ -60,6 +61,9 @@ feature.feature doxygen.doxproc.id : : free ;
# The title for the resulting BoostBook reference section.
feature.feature doxygen.doxproc.title : : free ;
# Location for images when generating XML
feature.feature doxygen:xml-imagedir : : free ;
# Doxygen configuration input file.
type.register DOXYFILE : doxyfile ;
@@ -75,6 +79,7 @@ type.register DOXYGEN_HTML_MULTIFILE : html-dir : HTML ;
# Redirection HTML file to HTML multifile directory.
type.register DOXYGEN_HTML : : HTML ;
type.register DOXYGEN_XML_IMAGES : doxygen-xml-images ;
# Initialize the Doxygen module. Parameters are:
# name: the name of the 'doxygen' executable. If not specified, the name
@@ -152,6 +157,8 @@ rule init ( name ? )
: DOXYFILE : DOXYGEN_HTML_MULTIFILE ;
generators.register-standard doxygen.html-redirect
: DOXYGEN_HTML_MULTIFILE : DOXYGEN_HTML ;
generators.register-standard doxygen.copy-latex-pngs
: DOXYGEN_HTML : DOXYGEN_XML_IMAGES ;
IMPORT $(__name__) : doxygen : : doxygen ;
}
@@ -343,6 +350,129 @@ rule html-redirect ( target : source : properties * )
: true ;
}
rule copy-latex-pngs ( target : source : requirements * )
{
local directory = [ path.native
[ feature.get-values <doxygen:xml-imagedir> :
$(requirements) ] ] ;
if [ os.name ] = NT
{
CP on $(target) = copy /y ;
MKDIR on $(target) = mkdir ;
FROM on $(target) = \\*.png ;
TOHTML on $(target) = .\\html\\$(directory) ;
TOPDF on $(target) = \\$(directory) ;
}
else
{
CP on $(target) = cp ;
MKDIR on $(target) = mkdir -p ;
FROM on $(target) = /*.png ;
TOHTML on $(target) = ./html/$(directory) ;
TOPDF on $(target) = $(target:D)/$(directory) ;
}
}
actions copy-latex-pngs
{
$(MKDIR) $(TOHTML)
$(MKDIR) $(<:D)$(TOPDF)
$(CP) $(>:S=)$(FROM) $(TOHTML)
$(CP) $(>:S=)$(FROM) $(<:D)$(TOPDF)
echo "Stamped" > "$(<)"
}
# building latex images for doxygen XML depends
# on latex, dvips, and ps being in your PATH.
# This is true for most Unix installs, but
# not on Win32, where you will need to install
# MkTex and Ghostscript and add these tools
# to your path.
actions check-latex
{
latex -version >$(<)
}
actions check-dvips
{
dvips -version >$(<)
}
if [ os.name ] = "NT"
{
actions check-gs
{
gswin32c -version >$(<)
}
}
else
{
actions check-gs
{
gs -version >$(<)
}
}
rule check-tools ( )
{
if ! $(.check-tools-targets)
{
# Find the root project.
local root-project = [ project.current ] ;
root-project = [ $(root-project).project-module ] ;
while
[ project.attribute $(root-project) parent-module ] &&
[ project.attribute $(root-project) parent-module ] != user-config
{
root-project =
[ project.attribute $(root-project) parent-module ] ;
}
.latex.check = [ new file-target latex.check
:
: [ project.target $(root-project) ]
: [ new action : doxygen.check-latex ]
:
] ;
.dvips.check = [ new file-target dvips.check
:
: [ project.target $(root-project) ]
: [ new action : doxygen.check-dvips ]
:
] ;
.gs.check = [ new file-target gs.check
:
: [ project.target $(root-project) ]
: [ new action : doxygen.check-gs ]
:
] ;
.check-tools-targets = $(.latex.check) $(.dvips.check) $(.gs.check) ;
}
return $(.check-tools-targets) ;
}
project.initialize $(__name__) ;
project doxygen ;
class doxygen-check-tools-target-class : basic-target
{
import doxygen ;
rule construct ( name : sources * : property-set )
{
return [ property-set.empty ] [ doxygen.check-tools ] ;
}
}
local project = [ project.current ] ;
targets.main-target-alternative
[ new doxygen-check-tools-target-class check-tools : $(project)
: [ targets.main-target-sources : check-tools : no-renaming ]
: [ targets.main-target-requirements : $(project) ]
: [ targets.main-target-default-build : $(project) ]
: [ targets.main-target-usage-requirements : $(project) ]
] ;
# User-level rule to generate BoostBook XML from a set of headers via Doxygen.
#
@@ -412,6 +542,43 @@ rule doxygen ( target : sources * : requirements * : default-build * : usage-req
requirements = [ property.change $(requirements) : <location> ] ;
local target-xml = $(target:B=$(target:B)-xml) ;
# Check whether we need to build images
local images-location =
[ feature.get-values <doxygen:xml-imagedir> : $(requirements) ] ;
if $(images-location)
{
doxygen $(target).doxygen-xml-images.html : $(sources)
: $(requirements)
<doxygen:param>QUIET=YES
<doxygen:param>WARNINGS=NO
<doxygen:param>WARN_IF_UNDOCUMENTED=NO
<dependency>/doxygen//check-tools ;
$(project).mark-target-as-explicit
$(target).doxygen-xml-images.html ;
targets.main-target-alternative
[ new typed-target $(target).doxygen-xml-images
: $(project) : DOXYGEN_XML_IMAGES
: $(target).doxygen-xml-images.html
: [ targets.main-target-requirements $(requirements)
: $(project) ]
: [ targets.main-target-default-build $(default-build)
: $(project) ]
] ;
$(project).mark-target-as-explicit
$(target).doxygen-xml-images ;
if ! [ regex.match "^(.*/)$" : $(images-location) ]
{
images-location = $(images-location)/ ;
}
requirements +=
<dependency>$(target).doxygen-xml-images
<xsl:param>boost.doxygen.formuladir=$(images-location) ;
}
## The doxygen configuration file.
targets.main-target-alternative
[ new typed-target $(target-xml:S=.tag) : $(project) : DOXYFILE

View File

@@ -25,6 +25,7 @@ import rc ;
import regex ;
import set ;
import unix ;
import fortran ;
if [ MATCH (--debug-configuration) : [ modules.peek : ARGV ] ]
@@ -224,6 +225,7 @@ if [ os.name ] = NT
generators.register-c-compiler gcc.compile.c++ : CPP : OBJ : <toolset>gcc ;
generators.register-c-compiler gcc.compile.c : C : OBJ : <toolset>gcc ;
generators.register-c-compiler gcc.compile.asm : ASM : OBJ : <toolset>gcc ;
generators.register-fortran-compiler gcc.compile.fortran : FORTRAN FORTRAN90 : OBJ : <toolset>gcc ;
# pch support
@@ -394,12 +396,19 @@ if [ os.name ] != NT && [ os.name ] != OSF && [ os.name ] != HPUX && [ os.name ]
SONAME_OPTION = -h ;
}
# HPUX, for some reason, seem to use '+h', not '-h'.
if [ os.name ] = HPUX
{
HAVE_SONAME = "" ;
SONAME_OPTION = +h ;
}
toolset.flags gcc.compile USER_OPTIONS <cflags> ;
toolset.flags gcc.compile.c++ USER_OPTIONS <cxxflags> ;
toolset.flags gcc.compile DEFINES <define> ;
toolset.flags gcc.compile INCLUDES <include> ;
toolset.flags gcc.compile.c++ TEMPLATE_DEPTH <c++-template-depth> ;
toolset.flags gcc.compile.fortran USER_OPTIONS <fflags> ;
rule compile.c++.pch ( targets * : sources * : properties * )
{
@@ -471,6 +480,10 @@ rule compile.c ( targets * : sources * : properties * )
DEPENDS $(<) : [ on $(<) return $(PCH_FILE) ] ;
}
rule compile.fortran
{
}
actions compile.c++ bind PCH_FILE
{
"$(CONFIG_COMMAND)" $(LANG) -ftemplate-depth-$(TEMPLATE_DEPTH) $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(PCH_FILE:D)" -I"$(INCLUDES)" -c -o "$(<:W)" "$(>:W)"
@@ -481,6 +494,11 @@ actions compile.c bind PCH_FILE
"$(CONFIG_COMMAND)" $(LANG) $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(PCH_FILE:D)" -I"$(INCLUDES)" -c -o "$(<)" "$(>)"
}
actions compile.fortran
{
"$(CONFIG_COMMAND)" $(LANG) $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(PCH_FILE:D)" -I"$(INCLUDES)" -c -o "$(<)" "$(>)"
}
rule compile.asm
{
LANG on $(<) = "-x assembler-with-cpp" ;
@@ -676,7 +694,7 @@ rule init-link-flags ( toolset linker condition )
# as opposed to -s since icc (intel's compiler) is generally
# option-compatible with and inherits from the gcc toolset, but does not
# support -s.
toolset.flags $(toolset).link OPTIONS $(condition)/<debug-symbols>off : -Wl,--strip-all : unchecked ;
toolset.flags $(toolset).link OPTIONS $(condition)/<strip>on : -Wl,--strip-all : unchecked ;
toolset.flags $(toolset).link RPATH $(condition) : <dll-path> : unchecked ;
toolset.flags $(toolset).link RPATH_LINK $(condition) : <xdll-path> : unchecked ;
toolset.flags $(toolset).link START-GROUP $(condition) : -Wl,--start-group : unchecked ;
@@ -731,7 +749,7 @@ rule init-link-flags ( toolset linker condition )
case hpux :
{
toolset.flags $(toolset).link OPTIONS $(condition)/<debug-symbols>off
toolset.flags $(toolset).link OPTIONS $(condition)/<strip>on
: -Wl,-s : unchecked ;
toolset.flags $(toolset).link OPTIONS $(condition)/<link>shared
: -fPIC : unchecked ;
@@ -740,7 +758,7 @@ rule init-link-flags ( toolset linker condition )
case osf :
{
# No --strip-all, just -s.
toolset.flags $(toolset).link OPTIONS $(condition)/<debug-symbols>off
toolset.flags $(toolset).link OPTIONS $(condition)/<strip>on
: -Wl,-s : unchecked ;
toolset.flags $(toolset).link RPATH $(condition) : <dll-path>
: unchecked ;
@@ -752,7 +770,7 @@ rule init-link-flags ( toolset linker condition )
case sun :
{
toolset.flags $(toolset).link OPTIONS $(condition)/<debug-symbols>off
toolset.flags $(toolset).link OPTIONS $(condition)/<strip>on
: -Wl,-s : unchecked ;
toolset.flags $(toolset).link RPATH $(condition) : <dll-path>
: unchecked ;

View File

@@ -36,4 +36,4 @@ actions compile.fortran
gcc -Wall $(OPTIONS) -D$(DEFINES) -I$(INCLUDES) -c -o "$(<)" "$(>)"
}
generators.register-fortran-compiler gfortran.compile.fortran : FORTRAN : OBJ ;
generators.register-fortran-compiler gfortran.compile.fortran : FORTRAN FORTRAN90 : OBJ ;

View File

@@ -32,7 +32,8 @@ type.set-generated-target-suffix PCH : <toolset>intel <toolset-intel:platform>li
toolset.inherit-rules intel-linux : gcc ;
toolset.inherit-flags intel-linux : gcc
: <inlining>off <inlining>on <inlining>full <optimization>space
: <inlining>off <inlining>on <inlining>full
<optimization>space <optimization>speed
<warnings>off <warnings>all <warnings>on
;
@@ -103,6 +104,7 @@ rule init ( version ? : command * : options * )
SPACE = " " ;
flags intel-linux.compile OPTIONS <optimization>space : "-O1" ; # no specific space optimization flag in icc
flags intel-linux.compile OPTIONS <optimization>speed : "-O3 -ip" ; # no specific space optimization flag in icc
flags intel-linux.compile OPTIONS <warnings>off : -w0 ;
flags intel-linux.compile OPTIONS <warnings>on : -w1 ;
@@ -147,7 +149,12 @@ rule compile.c++.pch ( targets * : sources * : properties * )
#
actions compile.c++.pch
{
rm -f "$(<)" && "$(CONFIG_COMMAND)" -x c++-header $(OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -c -pch-create "$(<)" "$(>)"
rm -f "$(<)" && "$(CONFIG_COMMAND)" -x c++-header $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -c -pch-create "$(<)" "$(>)"
}
actions compile.fortran
{
"ifort" -c $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -c -o "$(<)" "$(>)"
}
rule compile.c.pch ( targets * : sources * : properties * )
@@ -159,7 +166,7 @@ rule compile.c.pch ( targets * : sources * : properties * )
actions compile.c.pch
{
rm -f "$(<)" && "$(CONFIG_COMMAND)" -x c-header $(OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -c -pch-create "$(<)" "$(>)"
rm -f "$(<)" && "$(CONFIG_COMMAND)" -x c-header $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -c -pch-create "$(<)" "$(>)"
}
rule link ( targets * : sources * : properties * )
@@ -186,7 +193,7 @@ rule link.dll ( targets * : sources * : properties * )
# Differ from 'link' above only by -shared.
actions link.dll bind LIBRARIES
{
"$(CONFIG_COMMAND)" -L"$(LINKPATH)" -Wl,-R$(SPACE)-Wl,"$(RPATH)" -o "$(<)" -Wl,-soname$(SPACE)-Wl,$(<[1]:D=) -shared "$(>)" "$(LIBRARIES)" -l$(FINDLIBS-SA) -l$(FINDLIBS-ST) $(OPTIONS)
"$(CONFIG_COMMAND)" -L"$(LINKPATH)" -Wl,-R$(SPACE)-Wl,"$(RPATH)" -o "$(<)" -Wl,-soname$(SPACE)-Wl,$(<[1]:D=) -shared "$(>)" "$(LIBRARIES)" -l$(FINDLIBS-SA) -l$(FINDLIBS-ST) $(OPTIONS) $(USER_OPTIONS)
}

View File

@@ -163,7 +163,20 @@ rule cmdline_to_features ( cmdline : unknown-features ? )
local add = [ add_feature $(prefix) $(name) $(cmdline) ] ;
if $(add) {
result += $(add[1]) ;
if $(add[1]) = <find-shared-library>pthread
{
# Uhm. It's not really nice that this MPI implementation
# uses -lpthread as opposed to -pthread. We do want to
# set <threading>multi, instead of -lpthread.
result += "<threading>multi" ;
MPI_EXTRA_REQUIREMENTS += "<threading>multi" ;
}
else
{
result += $(add[1]) ;
}
cmdline = $(add[2]) ;
matched = yes ;
}
@@ -205,7 +218,7 @@ rule cmdline_to_features ( cmdline : unknown-features ? )
if $(otherflags) {
for unknown in $(unknown-features)
{
result += "$(unknown)$(otherflags)" ;
result += "$(unknown)$(otherflags:J= )" ;
}
}

View File

@@ -378,7 +378,7 @@ rule compile-c-c++ ( targets + : sources * )
# syntax highlighting in the messy N-quoted code below.
actions compile-c-c++-pch
{
$(.CC) @"@($(<[1]:W).rsp:E="$(>[2]:W)" -Fo"$(<[2]:W)" -Yc"$(>[1]:D=)" $(YLOPTION)"__bjam_pch_symbol_$(>[1]:D=)" -Fp"$(<[1]:W)" $(CC_RSPLINE))" "@($(<[1]:W).cpp:E=#include $(.escaped-double-quote)$(>[1]:D=)$(.escaped-double-quote))" $(.CC.FILTER)
$(.CC) @"@($(<[1]:W).rsp:E="$(>[2]:W)" -Fo"$(<[2]:W)" -Yc"$(>[1]:D=)" $(YLOPTION)"__bjam_pch_symbol_$(>[1]:D=)" -Fp"$(<[1]:W)" $(CC_RSPLINE))" "@($(<[1]:W).cpp:E=#include $(.escaped-double-quote)$(>[1]:D=)$(.escaped-double-quote)$(.nl))" $(.CC.FILTER)
}
@@ -1322,7 +1322,7 @@ if [ MATCH (--debug-configuration) : [ modules.peek : ARGV ] ]
# Known toolset versions, in order of preference.
.known-versions = 10.0 9.0 9.0express 8.0 8.0express 7.1 7.1toolkit 7.0 6.0 ;
.known-versions = 10.0 10.0express 9.0 9.0express 8.0 8.0express 7.1 7.1toolkit 7.0 6.0 ;
# Version aliases.
.version-alias-6 = 6.0 ;
@@ -1342,6 +1342,7 @@ if [ MATCH (--debug-configuration) : [ modules.peek : ARGV ] ]
.version-9.0-reg = "VisualStudio\\9.0\\Setup\\VC" ;
.version-9.0express-reg = "VCExpress\\9.0\\Setup\\VC" ;
.version-10.0-reg = "VisualStudio\\10.0\\Setup\\VC" ;
.version-10.0express-reg = "VCExpress\\10.0\\Setup\\VC" ;
# Visual C++ Toolkit 2003 does not store its installation path in the registry.
# The environment variable 'VCToolkitInstallDir' and the default installation

View File

@@ -30,13 +30,13 @@ rule init ( version ? : command * : options * )
toolset.flags pathscale.compile.fortran90 OPTIONS $(condition) :
[ feature.get-values <fflags> : $(options) ] : unchecked ;
command_c = $(command_c[1--2]) $(command[-1]:B=pathCC) ;
command_c = $(command_c[1--2]) $(command[-1]:B=pathcc) ;
toolset.flags pathscale CONFIG_C_COMMAND $(condition) : $(command_c) ;
# fortran support
local f-command = [ common.get-invocation-command pathscale : pathf90 : $(command) ] ;
local command_f = $(command_f[1--2]) $(f-command[-1]:B=pathf77) ;
local command_f = $(command_f[1--2]) $(f-command[-1]:B=pathf90) ;
local command_f90 = $(command_f[1--2]) $(f-command[-1]:B=pathf90) ;
toolset.flags pathscale CONFIG_F_COMMAND $(condition) : $(command_f) ;
@@ -87,7 +87,7 @@ actions compile.c++
actions compile.fortran
{
"$(CONFIG_F_COMMAND)" -f77 $(OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -c -o "$(<)" "$(>)"
"$(CONFIG_F_COMMAND)" $(OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -c -o "$(<)" "$(>)"
}
rule compile.fortran90 ( targets * : sources * : properties * )

View File

@@ -58,7 +58,7 @@ generators.register-fortran-compiler pgi.compile.fortran : FORTRAN : OBJ : <tool
# Declare flags and actions for compilation
flags pgi.compile OPTIONS : -Kieee ;
flags pgi.compile OPTIONS <link>shared : -fpic ;
flags pgi.compile OPTIONS <debug-symbols>on : -g ;
flags pgi.compile OPTIONS <debug-symbols>on : -gopt ;
flags pgi.compile OPTIONS <profiling>on : -xprofile=tcov ;
flags pgi.compile OPTIONS <optimization>speed : -fast -Mx,8,0x10000000 ;
flags pgi.compile OPTIONS <optimization>space : -xO2 -xspace ;
@@ -92,7 +92,7 @@ actions compile.fortran
}
# Declare flags and actions for linking
flags pgi.link OPTIONS <debug-symbols>on : -g ;
flags pgi.link OPTIONS <debug-symbols>on : -gopt ;
# Strip the binary when no debugging is needed
flags pgi.link OPTIONS <debug-symbols>off : -s ;
flags pgi.link OPTIONS <profiling>on : -xprofile=tcov ;

View File

@@ -256,9 +256,9 @@ class qbk-scanner : common-scanner
{
rule pattern ( )
{
return "\\[[ \t]*include[ \t]+([^]]+)\\]"
"\\[[ \t]*include:[a-zA-Z0-9_]+[ \t]+([^]]+)\\]"
"\\[[ \t]*import[ \t]+([^]]+)\\]" ;
return "\\[[ ]*include[ ]+([^]]+)\\]"
"\\[[ ]*include:[a-zA-Z0-9_]+[ ]+([^]]+)\\]"
"\\[[ ]*import[ ]+([^]]+)\\]" ;
}
}

View File

@@ -354,16 +354,36 @@ class installed-exe-generator : generator
rule run ( project name ? : property-set : source : multiple ? )
{
local need-relink ;
if [ $(property-set).get <os> ] in NT CYGWIN ||
[ $(property-set).get <target-os> ] in windows cygwin
{
# Relinking is never needed on NT.
return [ stage.copy-file $(project)
}
else
{
# See if the dll-path properties are not changed during
# install. If so, copy, don't relink.
local a = [ $(source).action ] ;
local p = [ $(a).properties ] ;
local original = [ $(p).get <dll-path> ] ;
local current = [ $(property-set).get <dll-path> ] ;
if $(current) != $(original)
{
need-relink = true ;
}
}
if $(need-relink)
{
return [ stage.relink-file $(project)
: $(source) : $(property-set) ] ;
}
else
{
return [ stage.relink-file $(project)
return [ stage.copy-file $(project)
: $(source) : $(property-set) ] ;
}
}

View File

@@ -16,6 +16,7 @@ type.set-generated-target-prefix LIB : <target-os>cygwin : "cyg" ;
type.register STATIC_LIB : a lib : LIB ;
type.set-generated-target-suffix STATIC_LIB : <target-os>windows : lib ;
type.set-generated-target-suffix STATIC_LIB : <toolset>gcc <target-os>windows : a ;
type.set-generated-target-suffix STATIC_LIB : <target-os>cygwin : lib ;
type.set-generated-target-prefix STATIC_LIB : : lib ;

View File

@@ -27,7 +27,7 @@ rule init ( version ? : command * : options * )
command = [ common.get-invocation-command vacpp : xlC
: $(command) : "/usr/vacpp/bin/xlC" ] ;
common.handle-options vacpp : $(condition) : $(command) : $(options) ;
}
@@ -92,7 +92,7 @@ if [ os.name ] = AIX
else
{
# Linux PPC
flags vacpp.compile CFLAGS <link>shared : -qpic ;
flags vacpp.compile CFLAGS <link>shared : -qpic=large ;
flags vacpp FINDLIBS : rt ;
}
@@ -100,13 +100,13 @@ else
flags vacpp CFLAGS <profiling>on : -pg ;
flags vacpp LINKFLAGS <profiling>on : -pg ;
flags vacpp CFLAGS <cflags> ;
flags vacpp C++FLAGS <cxxflags> ;
flags vacpp.compile OPTIONS <cflags> ;
flags vacpp.compile.c++ OPTIONS <cxxflags> ;
flags vacpp DEFINES <define> ;
flags vacpp UNDEFS <undef> ;
flags vacpp HDRS <include> ;
flags vacpp STDHDRS <sysinclude> ;
flags vacpp LINKFLAGS <linkflags> ;
flags vacpp.link OPTIONS <linkflags> ;
flags vacpp ARFLAGS <arflags> ;
flags vacpp LIBPATH <library-path> ;
@@ -120,25 +120,28 @@ flags vacpp VA_C_COMPILER <threading>multi : xlc_r ;
flags vacpp VA_CXX_COMPILER <threading>single : xlC ;
flags vacpp VA_CXX_COMPILER <threading>multi : xlC_r ;
SPACE = " " ;
flags vacpp.link.dll HAVE_SONAME <target-os>linux : "" ;
actions vacpp.link bind NEEDLIBS
{
$(VA_CXX_COMPILER) $(EXE-LINKFLAGS) $(LINKFLAGS) -o "$(<[1])" -L$(LIBPATH) -L$(STDLIBPATH) "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS)
$(VA_CXX_COMPILER) $(EXE-LINKFLAGS) $(LINKFLAGS) -o "$(<[1])" -L$(LIBPATH) -L$(STDLIBPATH) "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) $(OPTIONS) $(USER_OPTIONS)
}
actions vacpp.link.dll bind NEEDLIBS
{
xlC_r -G $(LINKFLAGS) -o "$(<[1])" -L$(LIBPATH) -L$(STDLIBPATH) "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS)
xlC_r -G $(LINKFLAGS) -o "$(<[1])" $(HAVE_SONAME)-Wl,-soname$(SPACE)-Wl,$(<[-1]:D=) -L$(LIBPATH) -L$(STDLIBPATH) "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) $(OPTIONS) $(USER_OPTIONS)
}
actions vacpp.compile.c
{
$(VA_C_COMPILER) -c -I$(BOOST_ROOT) -U$(UNDEFS) -D$(DEFINES) $(CFLAGS) -I"$(HDRS)" -I"$(STDHDRS)" -o "$(<)" "$(>)"
$(VA_C_COMPILER) -c $(OPTIONS) $(USER_OPTIONS) -I$(BOOST_ROOT) -U$(UNDEFS) -D$(DEFINES) $(CFLAGS) -I"$(HDRS)" -I"$(STDHDRS)" -o "$(<)" "$(>)"
}
actions vacpp.compile.c++
{
$(VA_CXX_COMPILER) -c -I$(BOOST_ROOT) -U$(UNDEFS) -D$(DEFINES) $(CFLAGS) $(C++FLAGS) -I"$(HDRS)" -I"$(STDHDRS)" -o "$(<)" "$(>)"
$(VA_CXX_COMPILER) -c $(OPTIONS) $(USER_OPTIONS) -I$(BOOST_ROOT) -U$(UNDEFS) -D$(DEFINES) $(CFLAGS) $(C++FLAGS) -I"$(HDRS)" -I"$(STDHDRS)" -o "$(<)" "$(>)"
}
actions updated together piecemeal vacpp.archive