$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [boost] Directory structure not quite right yet?
From: Peter Dimov (lists_at_[hidden])
Date: 2015-01-05 08:37:14
Vladimir Prus wrote:
> On 01/03/2015 06:29 PM, Peter Dimov wrote:
> > Vladimir Prus wrote:
> >
> >> The only important aspect though, speaking as release manager, is that
> >> if we change this now, we'll likely break a huge number of user
> >> build and automation scripts that expect current layout, lots of
> >> instructions on the web using current layout, and so forth.
> >
> > Not if we symlink boost to include/boost, I think.
>
> Fair enough, though it would seem that having $BOOST_ROOT/include/boost
> directory and a $BOOST_ROOT/boost symlink, along with pre-existing scripts
> and instructions and some "new" ones only adds to complexity/confusion,
> not improves anything...
The symlink will be a transitory measure, to avoid breaking existing user
scripts. The official <include> location from that point on will be
"$BOOST_ROOT/include".
> ... - unless you'll use the new layout for some completely different
> workflow?
The workflow I have in mind is this:
-- Download bpm.zip, extract bpm.exe and bpm.conf to d:\boost-1.60.0
-- Suppose I only need Boost.System:
D:\boost-1.60.0>bpm install system
bpm: installing module 'system'
bpm: installing module 'assert'
bpm: installing module 'config'
bpm: installing module 'core'
bpm: installing module 'predef'
bpm: installing module 'build'
bpm: the following libraries need to be built:
system
bpm: (use ./b2 to build)
bpm: recreating header links
bpm: recreating index
-- The "recreating header links" step puts the header links into
C:\boost-1.60.0\include.
D:\boost-1.60.0>b2 toolset=msvc-8.0
Building the Boost C++ Libraries.
Performing configuration checks
- symlinks supported : no
- junctions supported : yes
- hardlinks supported : yes
Component configuration:
- system : building
...found 261 targets...
...updating 18 targets...
[...]
...updated 18 targets...
The Boost C++ Libraries were successfully built!
The following directory should be added to compiler include paths:
D:\boost-1.60.0\include
The following directory should be added to linker library paths:
D:\boost-1.60.0\stage\lib
-- So the user adds -I D:\boost-1.60.0\include and -L D:\boost-1.60.0\stage\lib to his project and everything is fine thereafter. I could have symlinked include/boost to boost instead, but it didn't feel right. Or, I could have symlinked boost to include/boost, without touching Jamroot, but then the headers target sees that boost is a symlink, removes it, and proceeds to make its own copies (that's part of its logic - boost is a split directory). So I patched Jamroot and boostcpp.jam instead: diff --git a/Jamroot b/Jamroot index 8885fd5..2510dc2 100644 --- a/Jamroot +++ b/Jamroot @@ -142,7 +142,7 @@ local all-headers = for dir in $(all-headers) { - link-directory $(dir)-headers : libs/$(dir)/include/boost : <location>. ; + link-directory $(dir)-headers : libs/$(dir)/include/boost : <location>include ; explicit $(dir)-headers ; } @@ -152,7 +152,7 @@ if $(all-headers) } project boost - : requirements <include>. + : requirements <include>include # Disable auto-linking for all targets here, primarily because it caused # troubles with V2. <define>BOOST_ALL_NO_LIB=1 @@ -164,7 +164,7 @@ project boost <toolset>como-linux:<define>_GNU_SOURCE=1 # When building docs within Boost, we want the standard Boost style <xsl:param>boost.defaults=Boost - : usage-requirements <include>. + : usage-requirements <include>include : build-dir bin.v2 ; @@ -226,7 +226,7 @@ for local l in $(all-libraries) } } -alias headers : $(all-headers)-headers : : : <include>. ; +alias headers : $(all-headers)-headers : : : <include>include ; explicit headers ; # Make project ids of all libraries known. diff --git a/boostcpp.jam b/boostcpp.jam index 7d7f941..230f5ad 100644 --- a/boostcpp.jam +++ b/boostcpp.jam @@ -500,7 +500,7 @@ rule post-build ( ok ? ) { if $(ok) { - local include-path = [ path.native $(BOOST_ROOT) ] ; + local include-path = [ path.native $(BOOST_ROOT)/include ] ; ECHO " The Boost C++ Libraries were successfully built! -- There do exist Jamfiles that use <include>../../.. <include>$BOOST_ROOT (those two amount to the same thing, but are repeated for some reason), but I tried a few at random and they seemed to work with the new location without any changes.