A few days ago I submitted patch with small fixes for Boost.Build to support Visual Studio 11 toolset. The patch has been accepted and committed to the current trunk in Boost repo. Thanks to Volodya for reviewing the patch.
Tag Archives: boost.build
Visual Studio 11 support for Boost.Build
I have just submitted patch with update for Boost.Build machinery to properly detect Visual Studio 11 (currently available as Developer Preview).
I have very little experience with Boost.Build v2 internals, so the patch may need further improvements. It works in my environment on Windows 7 (64-bit) with Visual Studio 2010 Express Edition installed alongside the Visual Studio 11 Developer Preview.
If you want to use Visual Studio 11 as Boost.Build toolset, just put the following entry in your user-config.jam file:
using msvc : 11.0 ;
To verify if the toolset is recognised correctly, use b2 debugging options:
b2 --debug-configuration --debug-building --debug-generator buffer.cpp notice: found boost-build.jam at D:/dev/boost/_svn/trunk/boost-build.jam notice: loading Boost.Build from D:/dev/boost/_svn/trunk/tools/build/v2 notice: Searching C:\Windows C:\Users\mloskot C:\Users\mloskot D:\dev\boost\_svn\trunk\tools/build/v2 D:/dev/boost/_svn/trunk/tools/build/v2/kernel D:/dev/ boost/_svn/trunk/tools/build/v2/util D:/dev/boost/_svn/trunk/tools/build/v2/build D:/dev/boost/_svn/trunk/tools/build/v2/tools D:/dev/boost/_svn/trunk/tool s/build/v2/contrib D:/dev/boost/_svn/trunk/tools/build/v2/. for site-config configuration file site-config.jam . notice: Loading site-config configuration file site-config.jam from D:/dev/boost/_svn/trunk/tools/build/v2/site-config.jam . notice: Searching C:\Users\mloskot C:\Users\mloskot D:\dev\boost\_svn\trunk\tools/build/v2 D:/dev/boost/_svn/trunk/tools/build/v2/kernel D:/dev/boost/_svn/ trunk/tools/build/v2/util D:/dev/boost/_svn/trunk/tools/build/v2/build D:/dev/boost/_svn/trunk/tools/build/v2/tools D:/dev/boost/_svn/trunk/tools/build/v2/ contrib D:/dev/boost/_svn/trunk/tools/build/v2/. for user-config configuration file user-config.jam . notice: Loading user-config configuration file user-config.jam from C:/Users/mloskot/user-config.jam . notice: [msvc-cfg] msvc-11.0 detected, command: 'C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\cl.exe' notice: [msvc-cfg] msvc-10.0 detected, command: 'C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cl.exe' notice: [msvc-cfg] msvc-10.0express detected, command: 'C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cl.exe' notice: will use 'C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\cl.exe' for msvc, condition <toolset>msvc-11.0 notice: [msvc-cfg] condition: '<toolset>msvc-11.0/<architecture>/<address-model>', setup: 'call "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcv arsall.bat" x86 >nul ...
and look for the following message reported:
notice: will use 'C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\cl.exe' for msvc, condition <toolset>msvc-11.0
Updating Boost.Build extensions
I’ve been continuing my Boost.Build adventures leading to preparation for review of the new Boost.GIL I/O framework. Here is a short patch with update I had to applie to Boost.Build extensions scripts for the libraries: jpeg-8a, libtiff 3.9.4 and zlib 1.2.4. It is boost-build_extensions-r66346-update.patch
This patch allowed me to successfully compile Boost.GIL tests. It’s been posted to the Boost mailing list, so perhaps it will be integrated with boost_extensions in the Boost Sandbox repository.
Notes on Boost.Build for Boost.GIL
Update: Updating Boost.Build extensions
Christian Henning, Boost.GIL developer, has been working intensively on design and implementation of the new image I/O extensions for Boost.GIL. It is Boost.GIL I/O v2. Official review of this piece of software by the Boost project Community is coming soon.
I have been playing with this new I/O lately myself and building it mostly using manually crafted solutions for Microsoft Visual Studio.
I decided to learn a bit more about the mysterious Boost.Build, so I can configure all Boost.GIL dependencies resolution in Jamfile and make testing process more portable.
Below, I include some notes of how I accomplished it. However, due to the cryptic nature of Boost.Build and my honest lack of understanding of this system, I have found my way through this configuration following bumpy path of trial and error. Thus, my findings may seem
weird to Boost.Build zealots and there surely is better way of doing it. Basically, I will use Boost.Build extensions – a very nice project which has a chance to become official part of the Boost.Build.
Here is directories layout I used in the following configuration with base path tagged using {DEV}. So, wherever you see the {DEV} tag in examples below, just substitute it with your own location:
$ cd {DEV}
$ ls -1
build_extensions
deps
Jamroot
output
test_images
trunk
First, checkout sources of Boost C++ libraries from the trunk in the Subversion repository:
$svn co http://svn.boost.org/svn/boost/trunk trunk
Second, get copy of the Boost.Build extensions from the Boost Sandbox – a place for software closely related but not included in official Boost:
svn co http://svn.boost.org/svn/boost/sandbox/tools/build_extensions/ build_extensions
Third, configure a couple of environment variables to locate Boost.Build components:
$ export BOOST_BUILD={DEV}/trunk/tools/build/v2
$ export BOOST_BUILD_PATH={DEV}/build_extensions/ext
Fourth, grab source code of dependencies of Boost.GIL I/O extensions like libjpeg, libpng, zlib, libtiff and install them by repeating the following two-steps procedure:
for library in (jpeg, libpng, zlib)
download library
unpack lib to {DEV}/deps
Fifth, get the new Boost.GIL I/O extensions. Current version at the moment of posting these notes is available as boost_review.zip package. Unpack it and copy content of boost directory in to boost subtree – {DEV}/trunk/boost, content of libs to {DEV}/trunk/libs. Basically, files of the GIL extensions should be installed in the following locations:
{DEV}/boost/gil/extension/io_new
{DEV}/trunk/boost/gil/extension/toolbox
{DEV}/trunk/libs/gil/io_new
Sixth, create empty Jamroot file:
$touch {DEV}/trunk/libs/gil/Jamroot
I found this file is required to not to confuse Boost.Build unnecessarily and without this file executing bjam throws a bunch of cryptic errors starting with:
trunk/tools/build/v2/build/virtual-target.jam:452: in _adjust-name from module object(file-target)@904 error: <tag>@rulename is present but is not the only </tag>feature
Finally, create Jamfile building your program based on Boost.GIL with all image format libraries specified as dependencies. As a quick test, I have modified (shorten) {DEV}/trunk/libs/gil/io_new/test/Jamfile.v2 to build one of tests for JPEG:
$ cat {DEV}/trunk/libs/gil/io_new/test/Jamfile.v2
import testing ;
using jpeg : 6a : {DEV}/deps/jpeg-8a ;
project
: requirements
<library>/boost/test//boost_unit_test_framework
<link>static
;
test-suite "gil::io_new"
:
[ run jpeg_read_test.cpp /ext/jpeg//jpeg ]
;
Quick check if the test program builds and runs:
$ bjam ...patience... ... gcc.link bin/jpeg_read_test.test/gcc-4.4.5/debug/link-static/jpeg_read_test testing.capture-output bin/jpeg_read_test.test/gcc-4.4.5/debug/link-static/jpeg_read_test.run **passed** bin/jpeg_read_test.test/gcc-4.4.5/debug/link-static/jpeg_read_test.test ...updated 9 targets...
Note, that executing bjam will build all the third-party libraries from their sources, as dependencies of Boost.GIL, and next all targets of your own binaries being dependant on Boost.GIL. No extra Jamfiles for libjpeg, libpng and other libraries are required. Here simply the magic of Boost.Build and its extensions kicks in.
If you need to use other formats, you need to import other libraries as well. Like this:
using zlib : 1.2.4 : {DEV}/deps/zlib-1.2.4 ;
using png : 1.4.0 : {DEV}/deps/libpng-1.4.1 ;
As I have mentioned, I not an expert of Boost.Build but rather wigwaging through its matter. So, if you’ve found an error or better solution please let me know. At the same time, if you have problems with applying my notes, it may mean they don’t present correct solution and I’d suggest rather to ask on the Boost mailing lists or IRC channel #boost than asking me.