Boost logo

Boost-Build :

Subject: [Boost-build] boost file system, program_option no longer build on HPUX/1.42
From: Avi Bahra (avibahra_at_[hidden])
Date: 2010-03-30 09:40:53


For 1.42 can no longer build boost on HP-UX.
File-system, program-options and serialisation all show a similar
problem

+ bjam --build-dir=./tmpBuildDir toolset=acc stage link=static
--with-filesystem variant=debug
...patience...
.......
acc.compile.c++
tmpBuildDir/boost/bin.v2/libs/filesystem/build/acc/debug/link-static/threading-multi/utf8_codecvt_facet.o
"./libs/detail/utf8_codecvt_facet.cpp", line 255: error #2014-D: extra text
after expected end of preprocessing directive
  #elif WCHAR_MAX > 0x10000

The actual file <boost_root>/libs/detail/utf8_codecvt_facet.cpp
appears to have been changed in boost 1.40
for the function get_cont_octet_out_count_impl

FROM:
// note the following code will generate on some platforms where
// wchar_t is defined as UCS2. The warnings are superfluous as
// the specialization is never instantitiated with such compilers.
template<>
int get_cont_octet_out_count_impl<4>(wchar_t word){
    if (word < 0x80) {
        return 0;
    }
    if (word < 0x800) {
        return 1;
    }
    if (word < 0x10000) {
        return 2;
    }
    if (word < 0x200000) {
        return 3;
    }
    if (word < 0x4000000) {
        return 4;
    }
    return 5;
}

TO:

template<>
int get_cont_octet_out_count_impl<4>(wchar_t word){
    if (word < 0x80) {
        return 0;
    }
    if (word < 0x800) {
        return 1;
    }

    // Note that the following code will generate warnings on some platforms
    // where wchar_t is defined as UCS2. The warnings are superfluous as
the
    // specialization is never instantitiated with such compilers, but this
    // can cause problems if warnings are being treated as errors, so we
guard
    // against that. Including <boost/detail/utf8_codecvt_facet.hpp> as we
do
    // should be enough to get WCHAR_MAX defined.
#if !defined(WCHAR_MAX)
# error WCHAR_MAX not defined!
#endif
    // cope with VC++ 7.1 or earlier having invalid WCHAR_MAX
#if defined(_MSC_VER) && _MSC_VER <= 1310 // 7.1 or earlier
    return 2;
#elif WCHAR_MAX > 0x10000

   if (word < 0x10000) {
        return 2;
    }
    if (word < 0x200000) {
        return 3;
    }
    if (word < 0x4000000) {
        return 4;
    }
    return 5;

#else
    return 2;
#endif
}

Does any one know of a work around ?

Any help appreciated.

  Best regards,
Ta,
   Avi



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