Opened 12 years ago

#4816 new Bugs

[BOOST::ASIO] Under Cygwin <boost/asio.hpp> doesn't compile

Reported by: frederic.jardon@… Owned by: chris_kohlhoff
Milestone: To Be Determined Component: asio
Version: Boost 1.43.0 Severity: Problem
Keywords: boost::asio pipe_select_interrupter Cc:

Description

Environment: Cygwin

Compiler: gcc

1st issue

boost/asio.hpp includes another header making references to the 'pipe_select_interrupter' but fails to include: boost/asio/detail/pipe_select_interrupter.hpp Where it is effectively defined

2nd issue

The C function 'cfgetospeed' is referenced by: boost/asio/impl/serial_port_base.ipp

But the inclusion of <termios.h> is not done under Cygwin and more, the cfgetospeed function is a macro, hence the statement on line 135 fails:

 speed_t baud = ::cfgetospeed(&storage);

3rd issue

boost/asio/detail/buffer_sequence_adapter.hpp

Makes references to the WSABUF structure when under Cygwin, but this structure exists only under the WIN32 environment. To compile I have to undefine the __CYGWIN__ macro before including this header.

How to reproduce

The following program doesn't compile:

/// gcc -c bug.cpp doesn't compile
#include <cstdlib>
#include <cstring>
#include <iostream>

#include <boost/asio.hpp>

int main(int argc, char* argv[])
{
	return 0;
}

User fix

I fix these issue in my programs by adding the following code BEFORE including <boost/asio.hpp>

/// 1st issue
#include <boost/asio/detail/pipe_select_interrupter.hpp>

/// 2nd issue
#ifdef __CYGWIN__
#include <termios.h>
#ifdef cfgetospeed
#define __cfgetospeed__impl(tp) cfgetospeed(tp)
#undef cfgetospeed
inline speed_t cfgetospeed(const struct termios *tp)
{
	return __cfgetospeed__impl(tp);
}
#undef __cfgetospeed__impl
#endif /// cfgetospeed is a macro

/// 3rd issue
#undef __CYGWIN__ 
#include <boost/asio/detail/buffer_sequence_adapter.hpp>
#define __CYGWIN__
#endif

Attachments (3)

boost_asio_bug_cygwin.cpp (391 bytes ) - added by frederic.jardon@… 12 years ago.
Program demonstrating the bug
error_log.txt (10.2 KB ) - added by frederic.jardon@… 12 years ago.
Error log when compiling with gcc
boost_asio_bug_cygwin_with_fix.cpp (789 bytes ) - added by frederic.jardon@… 12 years ago.
A corrected version which compiles correctly

Download all attachments as: .zip

Change History (3)

by frederic.jardon@…, 12 years ago

Attachment: boost_asio_bug_cygwin.cpp added

Program demonstrating the bug

by frederic.jardon@…, 12 years ago

Attachment: error_log.txt added

Error log when compiling with gcc

by frederic.jardon@…, 12 years ago

A corrected version which compiles correctly

Note: See TracTickets for help on using tickets.