diff --git a/boost-base.jam b/boost-base.jam index f1d9bd966..7034eab63 100644 --- a/boost-base.jam +++ b/boost-base.jam @@ -1045,9 +1045,14 @@ rule expand-build-request # Which features will pick up a default value because they are not in # the base variant or in the overrides? - local relevant_features = [ relevant-features $(toolset) ] ; - local defaulted-features = [ difference $(relevant_features) - : $(override-properties:G) $(base-properties:G) ] ; + local relevant-features = [ relevant-features $(toolset) ] ; + local override-free-features = [ intersection $(gSINGLE_VALUED_FREE_FEATURES) + : $(free-properties:G) ] ; + local defaulted-features = [ difference $(relevant-features) + : $(override-properties:G) $(base-properties:G) + $(override-free-features) + ] ; + local defaulted-properties = [ feature-default $(defaulted-features) ] ; # VP: defaulted-properties have the form value and there's 1 value. # Hence, each element of defaulted-properties will be part of each diff --git a/features.jam b/features.jam index 01f6e1f9d..0fd71f795 100644 --- a/features.jam +++ b/features.jam @@ -18,6 +18,7 @@ feature runtime-build : debug release ; feature optimization : off speed space ; feature inlining : off on full ; feature debug-symbols : on off : ; +free-feature debug-store : object database ; free-feature user-interface : console gui ; feature wide-character-support : on off ; @@ -41,6 +42,7 @@ free-feature dllversion ; # 1.27.0 (for use with soname-ing) feature shared-linkable : false true ; gLINK_COMPATIBLE = true ; + gALWAYS_RELEVANT = ; ##### Requirements by target type ##### diff --git a/msvc-tools.jam b/msvc-tools.jam index 165687806..964922f44 100644 --- a/msvc-tools.jam +++ b/msvc-tools.jam @@ -31,10 +31,11 @@ else VC_COMPILER = cl ; VC_LINKER = link ; - -flags msvc CFLAGS on : /Zi ; -flags msvc PDB_CFLAG on : /Fd ; -flags msvc PDB_LINKFLAG on : /PDB: ; +VC_PDB_NAME = vc60 ; + +flags msvc CFLAGS on/object : /Z7 ; +flags msvc CFLAGS on/database : /Zi ; +flags msvc PDB_CFLAG on/database : /Fd ; flags msvc LINKFLAGS on : /DEBUG ; flags msvc CFLAGS off : /Od ; @@ -76,18 +77,14 @@ flags msvc FINDLIBS ; flags msvc LINKFLAGS $(SHARED_TYPES) : /DLL ; -rule vc-set-pdb-file ( targets + ) +rule vc-set-pdb-file ( targets + : name ) { - local pdb = $(targets[1]:S=.pdb) ; - VC_PDB_FILE on $(targets) = $(LOCATE_TARGET)$(pdb:G=) ; + local pdb = $(targets[1]:B=$(name):S=.pdb) ; + VC_PDB_FILE on $(targets) = $(pdb:G=:R=$(LOCATE_TARGET)) ; LOCATE on $(pdb) = $(LOCATE_TARGET) ; Clean clean : $(pdb) ; } -actions quietly vc-set-pdb-file -{ -} - #### Link #### rule Link-action ( target implib ? : sources + : target-type ? ) @@ -103,7 +100,7 @@ rule Link-action ( target implib ? : sources + : target-type ? ) # don't want it. NOINCREMENTAL on $(<) = /INCREMENTAL:NO ; } - vc-set-pdb-file $(<) ; + vc-set-pdb-file $(<) : $(target:B) ; } actions together vc-Link bind NEEDLIBS @@ -116,11 +113,11 @@ actions together vc-Link bind NEEDLIBS rule Cc-action { - vc-set-pdb-file $(<) ; + vc-set-pdb-file $(<) : $(VC_PDB_NAME) ; vc-Cc $(<) : $(>) ; } -actions vc-Cc bind +actions vc-Cc { $(VC_SETUP) "$(VC_TOOL_PATH)$(VC_COMPILER)" /Zm400 -nologo -c -U$(UNDEFS) -D$(DEFINES) $(CFLAGS) -I"$(HDRS)" -I"$(STDHDRS)" $(PDB_CFLAG)"$(VC_PDB_FILE)" -Fo"$(<)" "$(>)" @@ -129,11 +126,11 @@ actions vc-Cc bind #### C++ #### rule C++-action { - vc-set-pdb-file $(<) ; + vc-set-pdb-file $(<) : $(VC_PDB_NAME) ; vc-C++ $(<) : $(>) ; } -actions vc-C++ bind +actions vc-C++ { $(VC_SETUP) "$(VC_TOOL_PATH)$(VC_COMPILER)" /Zm400 -nologo -GX -c -U$(UNDEFS) -D$(DEFINES) $(CFLAGS) $(C++FLAGS) -I"$(HDRS)" -I"$(STDHDRS)" $(PDB_CFLAG)"$(VC_PDB_FILE)" -Fo"$(<)" -Tp"$(>)" @@ -142,7 +139,7 @@ actions vc-C++ bind #### Archive #### rule Archive-action { - vc-set-pdb-file $(<) ; + vc-set-pdb-file $(<) : $(<:B) ; with-command-file vc-Archive $(<) : $(>) ; } diff --git a/v1/boost-base.jam b/v1/boost-base.jam index f1d9bd966..7034eab63 100644 --- a/v1/boost-base.jam +++ b/v1/boost-base.jam @@ -1045,9 +1045,14 @@ rule expand-build-request # Which features will pick up a default value because they are not in # the base variant or in the overrides? - local relevant_features = [ relevant-features $(toolset) ] ; - local defaulted-features = [ difference $(relevant_features) - : $(override-properties:G) $(base-properties:G) ] ; + local relevant-features = [ relevant-features $(toolset) ] ; + local override-free-features = [ intersection $(gSINGLE_VALUED_FREE_FEATURES) + : $(free-properties:G) ] ; + local defaulted-features = [ difference $(relevant-features) + : $(override-properties:G) $(base-properties:G) + $(override-free-features) + ] ; + local defaulted-properties = [ feature-default $(defaulted-features) ] ; # VP: defaulted-properties have the form value and there's 1 value. # Hence, each element of defaulted-properties will be part of each diff --git a/v1/features.jam b/v1/features.jam index 01f6e1f9d..0fd71f795 100644 --- a/v1/features.jam +++ b/v1/features.jam @@ -18,6 +18,7 @@ feature runtime-build : debug release ; feature optimization : off speed space ; feature inlining : off on full ; feature debug-symbols : on off : ; +free-feature debug-store : object database ; free-feature user-interface : console gui ; feature wide-character-support : on off ; @@ -41,6 +42,7 @@ free-feature dllversion ; # 1.27.0 (for use with soname-ing) feature shared-linkable : false true ; gLINK_COMPATIBLE = true ; + gALWAYS_RELEVANT = ; ##### Requirements by target type ##### diff --git a/v1/msvc-tools.jam b/v1/msvc-tools.jam index 165687806..964922f44 100644 --- a/v1/msvc-tools.jam +++ b/v1/msvc-tools.jam @@ -31,10 +31,11 @@ else VC_COMPILER = cl ; VC_LINKER = link ; - -flags msvc CFLAGS on : /Zi ; -flags msvc PDB_CFLAG on : /Fd ; -flags msvc PDB_LINKFLAG on : /PDB: ; +VC_PDB_NAME = vc60 ; + +flags msvc CFLAGS on/object : /Z7 ; +flags msvc CFLAGS on/database : /Zi ; +flags msvc PDB_CFLAG on/database : /Fd ; flags msvc LINKFLAGS on : /DEBUG ; flags msvc CFLAGS off : /Od ; @@ -76,18 +77,14 @@ flags msvc FINDLIBS ; flags msvc LINKFLAGS $(SHARED_TYPES) : /DLL ; -rule vc-set-pdb-file ( targets + ) +rule vc-set-pdb-file ( targets + : name ) { - local pdb = $(targets[1]:S=.pdb) ; - VC_PDB_FILE on $(targets) = $(LOCATE_TARGET)$(pdb:G=) ; + local pdb = $(targets[1]:B=$(name):S=.pdb) ; + VC_PDB_FILE on $(targets) = $(pdb:G=:R=$(LOCATE_TARGET)) ; LOCATE on $(pdb) = $(LOCATE_TARGET) ; Clean clean : $(pdb) ; } -actions quietly vc-set-pdb-file -{ -} - #### Link #### rule Link-action ( target implib ? : sources + : target-type ? ) @@ -103,7 +100,7 @@ rule Link-action ( target implib ? : sources + : target-type ? ) # don't want it. NOINCREMENTAL on $(<) = /INCREMENTAL:NO ; } - vc-set-pdb-file $(<) ; + vc-set-pdb-file $(<) : $(target:B) ; } actions together vc-Link bind NEEDLIBS @@ -116,11 +113,11 @@ actions together vc-Link bind NEEDLIBS rule Cc-action { - vc-set-pdb-file $(<) ; + vc-set-pdb-file $(<) : $(VC_PDB_NAME) ; vc-Cc $(<) : $(>) ; } -actions vc-Cc bind +actions vc-Cc { $(VC_SETUP) "$(VC_TOOL_PATH)$(VC_COMPILER)" /Zm400 -nologo -c -U$(UNDEFS) -D$(DEFINES) $(CFLAGS) -I"$(HDRS)" -I"$(STDHDRS)" $(PDB_CFLAG)"$(VC_PDB_FILE)" -Fo"$(<)" "$(>)" @@ -129,11 +126,11 @@ actions vc-Cc bind #### C++ #### rule C++-action { - vc-set-pdb-file $(<) ; + vc-set-pdb-file $(<) : $(VC_PDB_NAME) ; vc-C++ $(<) : $(>) ; } -actions vc-C++ bind +actions vc-C++ { $(VC_SETUP) "$(VC_TOOL_PATH)$(VC_COMPILER)" /Zm400 -nologo -GX -c -U$(UNDEFS) -D$(DEFINES) $(CFLAGS) $(C++FLAGS) -I"$(HDRS)" -I"$(STDHDRS)" $(PDB_CFLAG)"$(VC_PDB_FILE)" -Fo"$(<)" -Tp"$(>)" @@ -142,7 +139,7 @@ actions vc-C++ bind #### Archive #### rule Archive-action { - vc-set-pdb-file $(<) ; + vc-set-pdb-file $(<) : $(<:B) ; with-command-file vc-Archive $(<) : $(>) ; } diff --git a/v1/vc7-tools.jam b/v1/vc7-tools.jam index 916914114..22e3e274a 100644 --- a/v1/vc7-tools.jam +++ b/v1/vc7-tools.jam @@ -6,3 +6,4 @@ if ! $(MSVCDir) VC_TOOL_PATH = "$(VC7_ROOT)"\\bin\\ ; VC_SETUP = "CALL \"$(VC_TOOL_PATH)VCVARS32.BAT\" >nul" ; } +VC_PDB_NAME = vc70 ; diff --git a/vc7-tools.jam b/vc7-tools.jam index 916914114..22e3e274a 100644 --- a/vc7-tools.jam +++ b/vc7-tools.jam @@ -6,3 +6,4 @@ if ! $(MSVCDir) VC_TOOL_PATH = "$(VC7_ROOT)"\\bin\\ ; VC_SETUP = "CALL \"$(VC_TOOL_PATH)VCVARS32.BAT\" >nul" ; } +VC_PDB_NAME = vc70 ;