Boost logo

Boost-Build :

From: John Maddock (john_at_[hidden])
Date: 2008-05-02 08:31:37


John Maddock wrote:
> siliconman wrote:
>> In article <fv23l0$o52$1_at_[hidden]>,
>> "Robert Ramey" <ramey_at_[hidden]> wrote:
>>
>>> In V2 - I tried to update my Jamfile to handle this but have
>>> been unsuccessful. I did ask for help on this a couple of
>>> times on the build list - but the response I got suggested
>>> what I did should work - so here we are.
>>>
>>> I would love to get this fixed so I could test this
>>> compiler on my own system.
>>
>> So what needs done here? As it stands I am unable to do regression
>> testing at all. I'm very much willing to put time into this, but I
>> need at least a starting point.
>
> I think I *may* have a fix: it seems that if a target has both a
> <build>no and a <dependency>some-target, then you get a Boost.Build
> error from "some-target". Commenting out the <build>no option in
> libs/serialization/build/Jamfile.v2 fixes things temporarily, but
> isn't much of a fix: I think I have a better one, but it needs
> tidying up and testing!

The best I have is below - it requires a few rules to be duplicated in
several places which is not good at all - but it retains the <build>no
optimisation for older compilers.

I tried to use the import rule to define the new rules in one place only and
then import it where required, but I couldn't get it to work for some
reason. If anyone can see a way of tidying this up that would be great:
otherwise it may be better to simply remove the <build>no optimisation, but
then I guess Borland users will get an alarming number of error messages at
install time?

Anyway I'm out of time on this now: can one of David or Robert take a look
at this and see if it can be improved? Or maybe a BBv2 expert can help out?

Regards, John.

Index: build/Jamfile.v2
===================================================================
--- build/Jamfile.v2 (revision 44767)
+++ build/Jamfile.v2 (working copy)
@@ -8,11 +8,49 @@

 project boost/serialization
     : source-location ../src
- : requirements <dependency>../../config/test/all//BOOST_NO_STD_LOCALE
+ : requirements
       <conditional>@include-spirit
 ;

 SPIRIT_ROOT = [ modules.peek : SPIRIT_ROOT ] ;
+rule depend-wstreambuf ( properties * )
+{
+ local old-compiler ;
+ if <toolset>borland in $(properties)
+ {
+ old-compiler = true ;
+ }
+ else if <toolset>msvc in $(properties)
+ {
+ if <toolset-msvc:version>6.5 in $(properties)
+ || <toolset-msvc:version>7.0 in $(properties)
+ {
+ old-compiler = true ;
+ }
+ }
+
+ local result ;
+ if $(old-compiler)
+ {
+ if $(SPIRIT_ROOT)
+ {
+ # note - we can't use <include>$(SPIRIT_ROOT) because
+ # it puts -I$(SPIRIT_ROOT) AFTER the "../../.." in the command
line
.
+ # so use these instead
+ result =
<dependency>../../config/test/all//BOOST_NO_STD_WSTREAMBUF
 ;
+ }
+ else
+ {
+ }
+ }
+ else
+ {
+ result = <dependency>../../config/test/all//BOOST_NO_STD_WSTREAMBUF
;
+ }
+ return $(result) ;
+}
+
+SPIRIT_ROOT = [ modules.peek : SPIRIT_ROOT ] ;
 rule include-spirit ( properties * )
 {
     local old-compiler ;
@@ -37,7 +75,7 @@
             # note - we can't use <include>$(SPIRIT_ROOT) because
             # it puts -I$(SPIRIT_ROOT) AFTER the "../../.." in the command
line
.
             # so use these instead
- result = <cxxflags>-I$(SPIRIT_ROOT) ;
+ result = <cxxflags>-I$(SPIRIT_ROOT)
<dependency>../../config/test/a
ll//BOOST_NO_STD_LOCALE ;
         }
         else
         {
@@ -45,6 +83,10 @@
             result = <build>no ;
         }
     }
+ else
+ {
+ result = <dependency>../../config/test/all//BOOST_NO_STD_LOCALE ;
+ }
     return $(result) ;
 }

@@ -100,7 +142,7 @@
     : $(WSOURCES).cpp boost_serialization
     :
     <toolset>msvc:<cxxflags>/Gy
- <dependency>../../config/test/all//BOOST_NO_STD_WSTREAMBUF
+ <conditional>@depend-wstreambuf
     <link>shared:<define>BOOST_SERIALIZATION_DYN_LINK=1
     ;

Index: test/Jamfile.v2
===================================================================
--- test/Jamfile.v2 (revision 44767)
+++ test/Jamfile.v2 (working copy)
@@ -23,6 +23,45 @@
     test-bsl-run_polymorphic_archive
 ;

+SPIRIT_ROOT = [ modules.peek : SPIRIT_ROOT ] ;
+rule depend-wstreambuf ( properties * )
+{
+ local old-compiler ;
+ if <toolset>borland in $(properties)
+ {
+ old-compiler = true ;
+ }
+ else if <toolset>msvc in $(properties)
+ {
+ if <toolset-msvc:version>6.5 in $(properties)
+ || <toolset-msvc:version>7.0 in $(properties)
+ {
+ old-compiler = true ;
+ }
+ }
+
+ local result ;
+ if $(old-compiler)
+ {
+ if $(SPIRIT_ROOT)
+ {
+ # note - we can't use <include>$(SPIRIT_ROOT) because
+ # it puts -I$(SPIRIT_ROOT) AFTER the "../../.." in the command
line
.
+ # so use these instead
+ result =
<dependency>../../config/test/all//BOOST_NO_STD_WSTREAMBUF
 ;
+ }
+ else
+ {
+ }
+ }
+ else
+ {
+ result = <dependency>../../config/test/all//BOOST_NO_STD_WSTREAMBUF
;
+ }
+ return $(result) ;
+}
+
+
 BOOST_ARCHIVE_LIST = [ modules.peek : BOOST_ARCHIVE_LIST ] ;

 test-suite "serialization" :
@@ -84,11 +123,11 @@

         [ test-bsl-run-no-lib test_utf8_codecvt
             : ../src/utf8_codecvt_facet
- : <dependency>../../config/test/all//BOOST_NO_STD_WSTREAMBUF
+ : <conditional>@depend-wstreambuf
         ]
         [ test-bsl-run-no-lib test_codecvt_null
             : ../src/codecvt_null
- : <dependency>../../config/test/all//BOOST_NO_STD_WSTREAMBUF
+ : <conditional>@depend-wstreambuf
         ]

         # should fail compilation
Index: util/test.jam
===================================================================
--- util/test.jam (revision 44767)
+++ util/test.jam (working copy)
@@ -12,6 +12,45 @@

 BOOST_ARCHIVE_LIST = [ modules.peek : BOOST_ARCHIVE_LIST ] ;

+SPIRIT_ROOT = [ modules.peek : SPIRIT_ROOT ] ;
+rule depend-wstreambuf ( properties * )
+{
+ local old-compiler ;
+ if <toolset>borland in $(properties)
+ {
+ old-compiler = true ;
+ }
+ else if <toolset>msvc in $(properties)
+ {
+ if <toolset-msvc:version>6.5 in $(properties)
+ || <toolset-msvc:version>7.0 in $(properties)
+ {
+ old-compiler = true ;
+ }
+ }
+
+ local result ;
+ if $(old-compiler)
+ {
+ if $(SPIRIT_ROOT)
+ {
+ # note - we can't use <include>$(SPIRIT_ROOT) because
+ # it puts -I$(SPIRIT_ROOT) AFTER the "../../.." in the command
line
.
+ # so use these instead
+ result =
<dependency>../../config/test/all//BOOST_NO_STD_WSTREAMBUF
 ;
+ }
+ else
+ {
+ }
+ }
+ else
+ {
+ result = <dependency>../../config/test/all//BOOST_NO_STD_WSTREAMBUF
;
+ }
+ return $(result) ;
+}
+
+
 # these are used to shorten testing while in development. It permits
 # testing to be applied to just a particular type of archive
 if ! $(BOOST_ARCHIVE_LIST) {
@@ -94,7 +133,7 @@
             # both stlport and msvc6 define iswspace
             <toolset>msvc,<stdlib>stlport:<linkflags>"-force:multiple"
             <dependency>$(save-test)
- <dependency>../../config/test/all//BOOST_NO_STD_WSTREAMBUF
+ <conditional>@depend-wstreambuf
     ] ;
     return $(tests) ;
 }


Boost-Build list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk