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:
@@ -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
|
||||
|
||||
@@ -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) - ] ;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 ;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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—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>
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 ;
|
||||
|
||||
@@ -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) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 ;
|
||||
|
||||
@@ -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 ;
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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= )" ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 * )
|
||||
|
||||
@@ -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 ;
|
||||
|
||||
@@ -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[ ]+([^]]+)\\]" ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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) ] ;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 ;
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user