$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [boost] [system][chrono] header-only libs
From: vicente.botet (vicente.botet_at_[hidden])
Date: 2011-01-03 02:05:41
----- Original Message -----
From: "Beman Dawes" <bdawes_at_[hidden]>
To: "boost" <boost_at_[hidden]>
Sent: Monday, January 03, 2011 2:56 AM
Subject: Re: [boost] [system][chrono] header-only libs
> On Sun, Jan 2, 2011 at 12:24 PM, vicente.botet <vicente.botet_at_[hidden]> wrote:
>> Beman,
>>
>> I would like to know if you are yet interesteed on the header only version for Boost.System.
>>
>> Best,
>> Vicente
>
> I'm interested in the concept, but we would need to do a lot better
> that the code in the sandbox:
>
> Much of boost/system/detail/inlined/error_code.hpp code duplicates
> libs/system/src/error_code.cpp code. That isn't acceptable since it
> would create a maintenance nightmare. Code for each component needs to
> be defined in a single file, with macro magic to abstract away the
> difference between the library. Having to do every maintenance fix in
> two places isn't practical - the code will certainly diverge over
> time.
Hi,
Beman you have maybe missed the conditional compilation
#if 1
#define BOOST_SYSTEM_SOURCE
#include <boost/system/detail/inlined/error_code.hpp>
#else
// old code
#endif
I used this artifice to make easier possible evolutions of these file on trunk. So at the end the else part will be removed and there will be no duplicated code.
> The test framework also needs more work. Testing only the inlined
> version doesn't give enough confidence the library version works OK.
I've adapted the Boost.Chrono Jamfile to tests all the configurations
* shared link
* static link
* header only with BOOST_CHRONO_INLINED and BOOST_SYSTEM_INLINED
* header only with BOOST_USE_WINDOWS_H
as follows:
rule chrono-run ( sources )
{
return
[ run $(sources) ../build//boost_chrono
: :
: <define>BOOST_USE_WINDOWS_H
<library>/boost/system//boost_system
: $(sources[1]:B)_shared ]
[ run $(sources) ../build//boost_chrono/<link>static
: :
: <library>/boost/system//boost_system
: $(sources[1]:B)_static ]
[ run $(sources)
: :
: <define>BOOST_CHRONO_INLINED
<define>BOOST_SYSTEM_INLINED
: $(sources[1]:B)_header ]
[ run $(sources)
: :
: <define>BOOST_CHRONO_INLINED
<define>BOOST_USE_WINDOWS_H
<define>BOOST_SYSTEM_INLINED
: $(sources[1]:B)_header_win ]
;
}
Then we use it like
[ chrono-run duration/arithmetic_pass.cpp ]
I can add a similar kind of rule on Boost.System test so all the configurations are tested.
Best,
Vicente