[iostreams] info on msvc regressions

I spent some time this morning looking at the regressions that are being reported for compression tests in the Boost.Iostreams library on MSVC 8. I came across what I think is an omission in the v2 Jamfiles for iostreams. At the moment, the bzip2, glib, and zlib tests are failing with a link error on VC8 saying that the iostreams import library is not found. As it turns out, no import library is being created because the library's build Jamfile.v2 does not specify the BOOST_IOSTREAMS_DYN_LINK=1 define for DLL builds, so the __declspec(dllexport) tag is not used (and then, of course, VC8 does not make the empty import library). I think the last lines of the iostreams build Jamfile.v2 should read: lib boost_iostreams : $(sources) : <link>shared:<define>BOOST_IOSTREAMS_DYN_LINK=1 ; rather than just: lib boost_iostreams : $(sources) ; In addition, it appears that something similar should be included for the 3 compression tests in the test Jamfile.v2 (so that __declspec(dllimport) gets used). For example the bzip2_test should probably be something like: all-tests += [ test-iostreams bzip2_test.cpp ../build//boost_iostreams : <link>shared:<define>BOOST_IOSTREAMS_DYN_LINK=1 ] ; instead of just: all-tests += [ test-iostreams bzip2_test.cpp ../build//boost_iostreams ] ; and a similar change for the gzip_test and zlib_test. With those adjustments, these tests build and pass on my MSVC8 installation. If this all looks correct, hopefully someone can apply those changes to the jamfiles. Thanks, -Dave

David Deakins wrote:
I spent some time this morning looking at the regressions that are being reported for compression tests in the Boost.Iostreams library on MSVC 8. I came across what I think is an omission in the v2 Jamfiles for iostreams. At the moment, the bzip2, glib, and zlib tests are failing with a link error on VC8 saying that the iostreams import library is not found. As it turns out, no import library is being created because the library's build Jamfile.v2 does not specify the BOOST_IOSTREAMS_DYN_LINK=1 define for DLL builds, so the __declspec(dllexport) tag is not used (and then, of course, VC8 does not make the empty import library). I think the last lines of the iostreams build Jamfile.v2 should read:
lib boost_iostreams : $(sources)
<link>shared:<define>BOOST_IOSTREAMS_DYN_LINK=1 ;
rather than just:
lib boost_iostreams : $(sources) ;
In addition, it appears that something similar should be included for the 3 compression tests in the test Jamfile.v2 (so that __declspec(dllimport) gets used). For example the bzip2_test should probably be something like:
all-tests += [ test-iostreams bzip2_test.cpp ../build//boost_iostreams : <link>shared:<define>BOOST_IOSTREAMS_DYN_LINK=1 ] ;
instead of just:
all-tests += [ test-iostreams bzip2_test.cpp ../build//boost_iostreams ] ;
and a similar change for the gzip_test and zlib_test. With those adjustments, these tests build and pass on my MSVC8 installation. If this all looks correct, hopefully someone can apply those changes to the jamfiles.
Confirmed, changes applied, thanks for looking into this! John.
participants (2)
-
David Deakins
-
John Maddock