Ticket #8889: 0001-Boost.Build-finally-enable-building-of-PDB-files-with-both-dynam.patch

File 0001-Boost.Build-finally-enable-building-of-PDB-files-with-both-dynam.patch, 8.4 KB (added by Daniela Engert <dani@…>, 9 years ago)
  • tools/build/v2/tools/msvc.jam

    From 2f5e92556ed70ff62d36a9c89ab157a91931acf1 Mon Sep 17 00:00:00 2001
    From: Daniela Engert <dani@ngrt.de>
    Date: Mon, 22 Jul 2013 12:16:01 +0200
    Subject: [PATCH] Boost.Build finally enable building of PDB files with both dynamic and static libs.
     Add workaround for projects with multiple targets and precompiled header (e.g. Boost.Math).
    
    A corresponding implementation in msvc.py is still missing!
    
    Signed-off-by: Daniela Engert <dani@ngrt.de>
    ---
     tools/build/v2/tools/msvc.jam | 46 ++++++++++++++++++++++++-------------------
     1 file changed, 26 insertions(+), 20 deletions(-)
    
    diff --git a/tools/build/v2/tools/msvc.jam b/tools/build/v2/tools/msvc.jam
    index 9a9e37d..88431af 100644
    a b actions preprocess-c-c++ bind PDB_NAME  
    382382    $(.CC) @"@($(<[1]:W).rsp:E="$(>[1]:W)" -E $(PDB_CFLAG)"$(PDB_NAME)" -Yu"$(>[3]:D=)" -Fp"$(>[2]:W)" $(CC_RSPLINE))" >"$(<[1]:W)"
    383383}
    384384
    385 rule compile-c-c++ ( targets + : sources * )
     385rule compile-c-c++ ( targets + : sources * : properties * )
    386386{
    387387    DEPENDS $(<[1]) : [ on $(<[1]) return $(PCH_HEADER) ] ;
    388388    DEPENDS $(<[1]) : [ on $(<[1]) return $(PCH_FILE) ] ;
    389     PDB_NAME on $(<) = $(<[1]:S=.pdb) ;
    390     LOCATE on $(<[1]:S=.pdb) = [ on $(<[1]) return $(LOCATE) ] ;
    391389}
    392390
    393 rule preprocess-c-c++ ( targets + : sources * )
     391rule preprocess-c-c++ ( targets + : sources * : properties * )
    394392{
    395393    DEPENDS $(<[1]) : [ on $(<[1]) return $(PCH_HEADER) ] ;
    396394    DEPENDS $(<[1]) : [ on $(<[1]) return $(PCH_FILE) ] ;
    397     PDB_NAME on $(<) = $(<:S=.pdb) ;
    398     LOCATE on $(<[1]:S=.pdb) = [ on $(<[1]) return $(LOCATE) ] ;
    399395}
    400396
    401397# Action for running the C/C++ compiler using precompiled headers. In addition
    rule preprocess-c-c++ ( targets + : sources * )  
    404400#
    405401# The global .escaped-double-quote variable is used to avoid messing up Emacs
    406402# syntax highlighting in the messy N-quoted code below.
    407 actions compile-c-c++-pch
     403actions compile-c-c++-pch bind PDB_NAME
    408404{
    409     $(.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)
     405    $(.CC) @"@($(<[1]:W).rsp:E="$(>[2]:W)" -Fo"$(<[2]:W)" -Yc"$(>[1]:D=)" $(YLOPTION)"__bjam_pch_symbol_$(>[1]:D=)" -Fp"$(<[1]:W)" $(PDB_CFLAG)"$(PDB_NAME)" $(CC_RSPLINE))" "@($(<[1]:W).cpp:E=#include $(.escaped-double-quote)$(>[1]:D=)$(.escaped-double-quote)$(.nl))" $(.CC.FILTER)
    410406}
    411407
    412408
    413409# Action for running the C/C++ compiler using precompiled headers. An already
    414410# built source file for compiling the precompiled headers is expected to be
    415411# given as one of the source parameters.
    416 actions compile-c-c++-pch-s
     412actions compile-c-c++-pch-s bind PDB_NAME
    417413{
    418     $(.CC) @"@($(<[1]:W).rsp:E="$(>[2]:W)" -Fo"$(<[2]:W)" -Yc"$(>[1]:D=)" $(YLOPTION)"__bjam_pch_symbol_$(>[1]:D=)" -Fp"$(<[1]:W)" $(CC_RSPLINE))" $(.CC.FILTER)
     414    $(.CC) @"@($(<[1]:W).rsp:E="$(>[2]:W)" -Fo"$(<[2]:W)" -Yc"$(>[1]:D=)" $(YLOPTION)"__bjam_pch_symbol_$(>[1]:D=)" -Fp"$(<[1]:W)" $(PDB_CFLAG)"$(PDB_NAME)" $(CC_RSPLINE))" $(.CC.FILTER)
    419415}
    420416
    421417
    actions compile.rc  
    473469
    474470rule link ( targets + : sources * : properties * )
    475471{
     472    PDB_NAME on $(<[1]) = $(<[1]:S=.pdb) ;
     473    LOCATE on $(<[1]:S=.pdb) = [ on $(<[1]) return $(LOCATE) ] ;
     474    PDB_NAME on $(>) = $(<[1]:S=.pdb) ;
     475    LOCATE on $(<[1]:S=.pdb) = [ on $(<[1]) return $(LOCATE) ] ;
    476476    if <embed-manifest>on in $(properties)
    477477    {
    478478        msvc.manifest $(targets) : $(sources) : $(properties) ;
    rule link ( targets + : sources * : properties * )  
    481481
    482482rule link.dll ( targets + : sources * : properties * )
    483483{
     484    PDB_NAME on $(<[1]) = $(<[1]:S=.pdb) ;
     485    LOCATE on $(<[1]:S=.pdb) = [ on $(<[1]) return $(LOCATE) ] ;
     486    PDB_NAME on $(>) = $(<[1]:S=.intermediate-pdb) ;
     487    LOCATE on $(<[1]:S=.intermediate-pdb) = [ on $(<[1]) return $(LOCATE) ] ;
    484488    DEPENDS $(<) : [ on $(<) return $(DEF_FILE) ] ;
    485489    if <embed-manifest>on in $(properties)
    486490    {
    rule link.dll ( targets + : sources * : properties * )  
    500504
    501505if [ os.name ] in NT
    502506{
    503     actions link bind DEF_FILE LIBRARIES_MENTIONED_BY_FILE
     507    actions link bind DEF_FILE LIBRARIES_MENTIONED_BY_FILE PDB_NAME
    504508    {
    505         $(.LD) $(LINKFLAGS) /out:"$(<[1]:W)" /LIBPATH:"$(LINKPATH:W)" $(OPTIONS) @"@($(<[1]:W).rsp:E=$(.nl)"$(>)" $(.nl)$(LIBRARIES_MENTIONED_BY_FILE) $(.nl)$(LIBRARIES) $(.nl)"$(LIBRARY_OPTION)$(FINDLIBS_ST).lib" $(.nl)"$(LIBRARY_OPTION)$(FINDLIBS_SA).lib")"
     509        $(.LD) $(LINKFLAGS) /out:"$(<[1]:W)" /LIBPATH:"$(LINKPATH:W)" $(OPTIONS) $(PDB_LINKFLAG)"$(PDB_NAME)" /PDBALTPATH:"$(PDB_NAME:B).pdb" @"@($(<[1]:W).rsp:E=$(.nl)"$(>)" $(.nl)$(LIBRARIES_MENTIONED_BY_FILE) $(.nl)$(LIBRARIES) $(.nl)"$(LIBRARY_OPTION)$(FINDLIBS_ST).lib" $(.nl)"$(LIBRARY_OPTION)$(FINDLIBS_SA).lib")"
    506510        if %ERRORLEVEL% NEQ 0 EXIT %ERRORLEVEL%
    507511    }
    508512
    if [ os.name ] in NT  
    513517        )
    514518    }
    515519
    516     actions link.dll bind DEF_FILE LIBRARIES_MENTIONED_BY_FILE
     520    actions link.dll bind DEF_FILE LIBRARIES_MENTIONED_BY_FILE PDB_NAME
    517521    {
    518         $(.LD) /DLL $(LINKFLAGS) /out:"$(<[1]:W)" /IMPLIB:"$(<[2]:W)" /LIBPATH:"$(LINKPATH:W)" /def:"$(DEF_FILE)" $(OPTIONS) @"@($(<[1]:W).rsp:E=$(.nl)"$(>)" $(.nl)$(LIBRARIES_MENTIONED_BY_FILE) $(.nl)$(LIBRARIES) $(.nl)"$(LIBRARY_OPTION)$(FINDLIBS_ST).lib" $(.nl)"$(LIBRARY_OPTION)$(FINDLIBS_SA).lib")"
     522        $(.LD) /DLL $(LINKFLAGS) /out:"$(<[1]:W)" /IMPLIB:"$(<[2]:W)" /LIBPATH:"$(LINKPATH:W)" /def:"$(DEF_FILE)" $(OPTIONS) $(PDB_LINKFLAG)"$(PDB_NAME)" /PDBALTPATH:"$(PDB_NAME:B).pdb" @"@($(<[1]:W).rsp:E=$(.nl)"$(>)" $(.nl)$(LIBRARIES_MENTIONED_BY_FILE) $(.nl)$(LIBRARIES) $(.nl)"$(LIBRARY_OPTION)$(FINDLIBS_ST).lib" $(.nl)"$(LIBRARY_OPTION)$(FINDLIBS_SA).lib")"
    519523        if %ERRORLEVEL% NEQ 0 EXIT %ERRORLEVEL%
     524        if exist "$(PDB_NAME:S=.intermediate-pdb)" DEL "$(PDB_NAME:S=.intermediate-pdb)"
    520525    }
    521526
    522527    actions manifest.dll
    if [ os.name ] in NT  
    528533}
    529534else
    530535{
    531     actions link bind DEF_FILE LIBRARIES_MENTIONED_BY_FILE
     536    actions link bind DEF_FILE LIBRARIES_MENTIONED_BY_FILE PDB_NAME
    532537    {
    533         $(.LD) $(LINKFLAGS) /out:"$(<[1]:W)" /LIBPATH:"$(LINKPATH:W)" $(OPTIONS) @"@($(<[1]:W).rsp:E=$(.nl)"$(>)" $(.nl)$(LIBRARIES_MENTIONED_BY_FILE) $(.nl)$(LIBRARIES) $(.nl)"$(LIBRARY_OPTION)$(FINDLIBS_ST).lib" $(.nl)"$(LIBRARY_OPTION)$(FINDLIBS_SA).lib")"
     538        $(.LD) $(LINKFLAGS) /out:"$(<[1]:W)" /LIBPATH:"$(LINKPATH:W)" $(OPTIONS) $(PDB_LINKFLAG)"$(PDB_NAME)" /PDBALTPATH:"$(PDB_NAME:B).pdb" @"@($(<[1]:W).rsp:E=$(.nl)"$(>)" $(.nl)$(LIBRARIES_MENTIONED_BY_FILE) $(.nl)$(LIBRARIES) $(.nl)"$(LIBRARY_OPTION)$(FINDLIBS_ST).lib" $(.nl)"$(LIBRARY_OPTION)$(FINDLIBS_SA).lib")"
    534539    }
    535540
    536541    actions manifest
    else  
    540545        fi
    541546    }
    542547
    543     actions link.dll bind DEF_FILE LIBRARIES_MENTIONED_BY_FILE
     548    actions link.dll bind DEF_FILE LIBRARIES_MENTIONED_BY_FILE PDB_NAME
    544549    {
    545         $(.LD) /DLL $(LINKFLAGS) /out:"$(<[1]:W)" /IMPLIB:"$(<[2]:W)" /LIBPATH:"$(LINKPATH:W)" /def:"$(DEF_FILE)" $(OPTIONS) @"@($(<[1]:W).rsp:E=$(.nl)"$(>)" $(.nl)$(LIBRARIES_MENTIONED_BY_FILE) $(.nl)$(LIBRARIES) $(.nl)"$(LIBRARY_OPTION)$(FINDLIBS_ST).lib" $(.nl)"$(LIBRARY_OPTION)$(FINDLIBS_SA).lib")"
     550        $(.LD) /DLL $(LINKFLAGS) /out:"$(<[1]:W)" /IMPLIB:"$(<[2]:W)" /LIBPATH:"$(LINKPATH:W)" /def:"$(DEF_FILE)" $(OPTIONS) $(PDB_LINKFLAG)"$(PDB_NAME)" /PDBALTPATH:"$(PDB_NAME:B).pdb" @"@($(<[1]:W).rsp:E=$(.nl)"$(>)" $(.nl)$(LIBRARIES_MENTIONED_BY_FILE) $(.nl)$(LIBRARIES) $(.nl)"$(LIBRARY_OPTION)$(FINDLIBS_ST).lib" $(.nl)"$(LIBRARY_OPTION)$(FINDLIBS_SA).lib")"
     551        $(.RM) "$(PDB_NAME:S=.intermediate-pdb)"
    546552    }
    547553
    548554    actions manifest.dll
    class msvc-pch-generator : pch-generator  
    620626        {
    621627            if [ type.is-derived [ $(g).type ] PCH ]
    622628            {
    623                 pch-file = $(g) ;
     629                pch-file = $(PDB_NAME:B)$(g) ;
    624630            }
    625631        }
    626632
    local rule register-toolset-really ( )  
    12581264
    12591265    # Declare flags for linking.
    12601266    {
    1261         toolset.flags msvc.link PDB_LINKFLAG <debug-symbols>on/<debug-store>database : /PDB: ;  # not used yet
     1267        toolset.flags msvc.link PDB_LINKFLAG <debug-symbols>on/<debug-store>database : /PDB: ;
    12621268        toolset.flags msvc.link LINKFLAGS <debug-symbols>on : /DEBUG ;
    12631269        toolset.flags msvc.link DEF_FILE <def-file> ;
    12641270