summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--boostcpp.jam67
1 files changed, 45 insertions, 22 deletions
diff --git a/boostcpp.jam b/boostcpp.jam
index eefc694f18..85a4cb323f 100644
--- a/boostcpp.jam
+++ b/boostcpp.jam
@@ -359,57 +359,84 @@ class top-level-target : alias-target-class
# incompatibility between debug and release variants. We build shared
# and static libraries since that is what most packages seem to provide
# (.so in libfoo and .a in libfoo-dev).
+
self.minimal-properties = [ property-set.create <variant>release
<threading>multi <link>shared <link>static <runtime-link>shared ] ;
+
# On Windows, new IDE projects use:
#
# runtime-link=dynamic, threading=multi, variant=(debug|release)
#
# and in addition, C++ Boost's autolink defaults to static linking.
+
self.minimal-properties-win = [ property-set.create <variant>debug
<variant>release <threading>multi <link>static <runtime-link>shared
- ] ;
+ <address-model>32 <address-model>64 ] ;
self.complete-properties = [ property-set.create
<variant>debug <variant>release
<threading>multi
<link>shared <link>static
<runtime-link>shared <runtime-link>static ] ;
+
+ self.complete-properties-win = [ property-set.create
+ <variant>debug <variant>release
+ <threading>multi
+ <link>shared <link>static
+ <runtime-link>shared <runtime-link>static
+ <address-model>32 <address-model>64 ] ;
}
rule generate ( property-set )
{
modules.poke : top-level-targets : [ modules.peek : top-level-targets ]
$(self.name) ;
- if $(self.build-type) = minimal
+
+ local os = [ $(property-set).get <target-os> ] ;
+
+ # Because we completely override the parent's 'generate' we need to
+ # check for default feature values ourselves.
+
+ if ! $(os)
{
- local expanded ;
+ os = [ feature.defaults <target-os> ] ;
+ os = $(os:G=) ;
+ }
- local os = [ $(property-set).get <target-os> ] ;
- # Because we completely override the parent's 'generate' we need to
- # check for default feature values ourselves.
- if ! $(os)
- {
- os = [ feature.defaults <target-os> ] ;
- os = $(os:G=) ;
- }
+ local build-type-set ;
+ if $(self.build-type) = minimal
+ {
if $(os) = windows
{
- expanded = [ targets.apply-default-build $(property-set)
- : $(self.minimal-properties-win) ] ;
+ build-type-set = $(self.minimal-properties-win) ;
}
else
{
- expanded = [ targets.apply-default-build $(property-set)
- : $(self.minimal-properties) ] ;
+ build-type-set = $(self.minimal-properties) ;
}
- return [ build-multiple $(expanded) ] ;
}
else if $(self.build-type) = complete
{
+ if $(os) = windows
+ {
+ build-type-set = $(self.complete-properties-win) ;
+ }
+ else
+ {
+ build-type-set = $(self.complete-properties) ;
+ }
+ }
+ else
+ {
+ import errors ;
+ errors.error "Unknown build type" ;
+ }
+
+ if $(build-type-set)
+ {
local expanded = [ targets.apply-default-build $(property-set)
- : $(self.complete-properties) ] ;
+ : $(build-type-set) ] ;
# Filter inappopriate combinations.
local filtered ;
@@ -427,13 +454,9 @@ class top-level-target : alias-target-class
filtered += $(p) ;
}
}
+
return [ build-multiple $(filtered) ] ;
}
- else
- {
- import errors ;
- errors.error "Unknown build type" ;
- }
}
rule build-multiple ( property-sets * )