Skip to content

Commit bd500f0

Browse files
committed
Add support for using Cygwin without __USE_W32_SOCKETS.
1 parent bf4b2bc commit bd500f0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+349
-291
lines changed

configure.ac

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,12 @@ fi
7676

7777
AM_CONDITIONAL(HAVE_OPENSSL,test x$OPENSSL_FOUND != xno)
7878

79+
AC_ARG_ENABLE(cygwin-w32-sockets,
80+
[ --enable-cygwin-w32-sockets enable native Windows sockets support when using Cygwin],
81+
[
82+
HAVE_CYGWIN_W32_SOCKETS=yes
83+
])
84+
7985
WINDOWS=no
8086
case $host in
8187
*-*-linux*)
@@ -105,9 +111,14 @@ case $host in
105111
WINDOWS=yes
106112
;;
107113
*-pc-cygwin*)
108-
CXXFLAGS="$CXXFLAGS -D__USE_W32_SOCKETS -D_WIN32_WINNT=0x0601"
109-
LIBS="$LIBS -lws2_32 -lmswsock -lbcrypt"
110-
WINDOWS=yes
114+
if test "$HAVE_CYGWIN_W32_SOCKETS" = yes; then
115+
CXXFLAGS="$CXXFLAGS -D__USE_W32_SOCKETS -D_WIN32_WINNT=0x0601"
116+
LIBS="$LIBS -lws2_32 -lmswsock -lbcrypt"
117+
WINDOWS=yes
118+
else
119+
CXXFLAGS="$CXXFLAGS"
120+
LDFLAGS="$LDFLAGS"
121+
fi
111122
;;
112123
*-apple-darwin*)
113124
CXXFLAGS="$CXXFLAGS"

include/asio/detail/buffer_sequence_adapter.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class buffer_sequence_adapter_base
4444
ASIO_DECL static void init_native_buffer(
4545
native_buffer_type& buf,
4646
const asio::const_buffer& buffer);
47-
#elif defined(ASIO_WINDOWS) || defined(__CYGWIN__)
47+
#elif defined(ASIO_WINDOWS) || defined(ASIO_CYGWIN_W32_SOCKETS)
4848
public:
4949
// The maximum number of buffers to support in a single operation.
5050
enum { max_buffers = 64 < max_iov_len ? 64 : max_iov_len };
@@ -65,7 +65,7 @@ class buffer_sequence_adapter_base
6565
buf.buf = const_cast<char*>(static_cast<const char*>(buffer.data()));
6666
buf.len = static_cast<ULONG>(buffer.size());
6767
}
68-
#else // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
68+
#else // defined(ASIO_WINDOWS) || defined(ASIO_CYGWIN_W32_SOCKETS)
6969
public:
7070
// The maximum number of buffers to support in a single operation.
7171
enum { max_buffers = 64 < max_iov_len ? 64 : max_iov_len };
@@ -97,7 +97,7 @@ class buffer_sequence_adapter_base
9797
init_iov_base(iov.iov_base, const_cast<void*>(buffer.data()));
9898
iov.iov_len = buffer.size();
9999
}
100-
#endif // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
100+
#endif // defined(ASIO_WINDOWS) || defined(ASIO_CYGWIN_W32_SOCKETS)
101101
};
102102

103103
// Helper class to translate buffers into the native buffer representation.

include/asio/detail/config.hpp

Lines changed: 64 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -761,8 +761,22 @@
761761
# define ASIO_VERSION_TAG_b
762762
#endif // defined(ASIO_WINDOWS)
763763

764+
// Cygwin target using Win32 sockets.
765+
#if !defined(ASIO_CYGWIN_W32_SOCKETS)
766+
# if defined(__CYGWIN__)
767+
# if defined(__USE_W32_SOCKETS)
768+
# define ASIO_CYGWIN_W32_SOCKETS 1
769+
# endif // defined(__USE_W32_SOCKETS)
770+
# endif // defined(__CYGWIN__)
771+
#endif // !defined(ASIO_CYGWIN_W32_SOCKETS)
772+
#if defined(ASIO_CYGWIN_W32_SOCKETS)
773+
# define ASIO_VERSION_TAG_c c
774+
#else // defined(ASIO_CYGWIN_W32_SOCKETS)
775+
# define ASIO_VERSION_TAG_c
776+
#endif // defined(ASIO_CYGWIN_W32_SOCKETS)
777+
764778
// Windows: target OS version.
765-
#if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
779+
#if defined(ASIO_WINDOWS) || defined(ASIO_CYGWIN_W32_SOCKETS)
766780
# if !defined(_WIN32_WINNT) && !defined(_WIN32_WINDOWS)
767781
# if defined(_MSC_VER) || (defined(__BORLANDC__) && !defined(__clang__))
768782
# pragma message( \
@@ -795,47 +809,47 @@
795809
# endif // !defined(_WINSOCK2API_)
796810
# endif // defined(__WIN32__) && !defined(WIN32)
797811
# endif // defined(__BORLANDC__)
798-
# if defined(__CYGWIN__)
812+
# if defined(ASIO_CYGWIN_W32_SOCKETS)
799813
# if !defined(__USE_W32_SOCKETS)
800814
# error You must add -D__USE_W32_SOCKETS to your compiler options.
801815
# endif // !defined(__USE_W32_SOCKETS)
802-
# endif // defined(__CYGWIN__)
803-
#endif // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
816+
# endif // defined(ASIO_CYGWIN_W32_SOCKETS)
817+
#endif // defined(ASIO_WINDOWS) || defined(ASIO_CYGWIN_W32_SOCKETS)
804818

805819
// Windows: minimise header inclusion.
806-
#if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
820+
#if defined(ASIO_WINDOWS) || defined(ASIO_CYGWIN_W32_SOCKETS)
807821
# if !defined(ASIO_NO_WIN32_LEAN_AND_MEAN)
808822
# if !defined(WIN32_LEAN_AND_MEAN)
809823
# define WIN32_LEAN_AND_MEAN
810824
# endif // !defined(WIN32_LEAN_AND_MEAN)
811825
# endif // !defined(ASIO_NO_WIN32_LEAN_AND_MEAN)
812-
#endif // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
826+
#endif // defined(ASIO_WINDOWS) || defined(ASIO_CYGWIN_W32_SOCKETS)
813827

814828
// Windows: suppress definition of "min" and "max" macros.
815-
#if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
829+
#if defined(ASIO_WINDOWS) || defined(ASIO_CYGWIN_W32_SOCKETS)
816830
# if !defined(ASIO_NO_NOMINMAX)
817831
# if !defined(NOMINMAX)
818832
# define NOMINMAX 1
819833
# endif // !defined(NOMINMAX)
820834
# endif // !defined(ASIO_NO_NOMINMAX)
821-
#endif // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
835+
#endif // defined(ASIO_WINDOWS) || defined(ASIO_CYGWIN_W32_SOCKETS)
822836

823837
// Windows: IO Completion Ports.
824838
#if !defined(ASIO_HAS_IOCP)
825-
# if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
839+
# if defined(ASIO_WINDOWS) || defined(ASIO_CYGWIN_W32_SOCKETS)
826840
# if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0400)
827841
# if !defined(UNDER_CE) && !defined(ASIO_WINDOWS_APP)
828842
# if !defined(ASIO_DISABLE_IOCP)
829843
# define ASIO_HAS_IOCP 1
830844
# endif // !defined(ASIO_DISABLE_IOCP)
831845
# endif // !defined(UNDER_CE) && !defined(ASIO_WINDOWS_APP)
832846
# endif // defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0400)
833-
# endif // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
847+
# endif // defined(ASIO_WINDOWS) || defined(ASIO_CYGWIN_W32_SOCKETS)
834848
#endif // !defined(ASIO_HAS_IOCP)
835849
#if defined(ASIO_HAS_IOCP)
836-
# define ASIO_VERSION_TAG_c c
850+
# define ASIO_VERSION_TAG_d d
837851
#else // defined(ASIO_HAS_IOCP)
838-
# define ASIO_VERSION_TAG_c
852+
# define ASIO_VERSION_TAG_d
839853
#endif // defined(ASIO_HAS_IOCP)
840854

841855
// Windows: Slim Reader/Writer Locks.
@@ -852,9 +866,9 @@
852866
# endif // !defined(ASIO_DISABLE_WINDOWS_SRWLOCK)
853867
#endif // !defined(ASIO_HAS_WINDOWS_SRWLOCK)
854868
#if defined(ASIO_HAS_WINDOWS_SRWLOCK)
855-
# define ASIO_VERSION_TAG_d d
869+
# define ASIO_VERSION_TAG_e e
856870
#else // defined(ASIO_HAS_WINDOWS_SRWLOCK)
857-
# define ASIO_VERSION_TAG_d
871+
# define ASIO_VERSION_TAG_e
858872
#endif // defined(ASIO_HAS_WINDOWS_SRWLOCK)
859873

860874
// On POSIX (and POSIX-like) platforms we need to include unistd.h in order to
@@ -913,24 +927,24 @@
913927
# endif // defined(ASIO_HAS_IO_URING)
914928
#endif // defined(__linux__)
915929
#if defined(ASIO_HAS_EPOLL)
916-
# define ASIO_VERSION_TAG_e e
930+
# define ASIO_VERSION_TAG_f f
917931
#else // defined(ASIO_HAS_EPOLL)
918-
# define ASIO_VERSION_TAG_e
932+
# define ASIO_VERSION_TAG_f
919933
#endif // defined(ASIO_HAS_EPOLL)
920934
#if defined(ASIO_HAS_EVENTFD)
921-
# define ASIO_VERSION_TAG_f f
935+
# define ASIO_VERSION_TAG_g g
922936
#else // defined(ASIO_HAS_EVENTFD)
923-
# define ASIO_VERSION_TAG_f
937+
# define ASIO_VERSION_TAG_g
924938
#endif // defined(ASIO_HAS_EVENTFD)
925939
#if defined(ASIO_HAS_TIMERFD)
926-
# define ASIO_VERSION_TAG_g g
940+
# define ASIO_VERSION_TAG_h h
927941
#else // defined(ASIO_HAS_TIMERFD)
928-
# define ASIO_VERSION_TAG_g
942+
# define ASIO_VERSION_TAG_h
929943
#endif // defined(ASIO_HAS_TIMERFD)
930944
#if defined(ASIO_HAS_IO_URING)
931-
# define ASIO_VERSION_TAG_h h
945+
# define ASIO_VERSION_TAG_i i
932946
#else // defined(ASIO_HAS_IO_URING)
933-
# define ASIO_VERSION_TAG_h
947+
# define ASIO_VERSION_TAG_i
934948
#endif // defined(ASIO_HAS_IO_URING)
935949

936950
// Linux: io_uring is used instead of epoll.
@@ -940,9 +954,9 @@
940954
# endif // !defined(ASIO_HAS_EPOLL) && defined(ASIO_HAS_IO_URING)
941955
#endif // !defined(ASIO_HAS_IO_URING_AS_DEFAULT)
942956
#if defined(ASIO_HAS_IO_URING_AS_DEFAULT)
943-
# define ASIO_VERSION_TAG_i i
957+
# define ASIO_VERSION_TAG_j j
944958
#else // defined(ASIO_HAS_IO_URING_AS_DEFAULT)
945-
# define ASIO_VERSION_TAG_i
959+
# define ASIO_VERSION_TAG_j
946960
#endif // defined(ASIO_HAS_IO_URING_AS_DEFAULT)
947961

948962
// Mac OS X, FreeBSD, NetBSD, OpenBSD: kqueue.
@@ -960,9 +974,9 @@
960974
// || defined(__NetBSD__)
961975
// || defined(__OpenBSD__)
962976
#if defined(ASIO_HAS_KQUEUE)
963-
# define ASIO_VERSION_TAG_j j
977+
# define ASIO_VERSION_TAG_k k
964978
#else // defined(ASIO_HAS_KQUEUE)
965-
# define ASIO_VERSION_TAG_j
979+
# define ASIO_VERSION_TAG_k
966980
#endif // defined(ASIO_HAS_KQUEUE)
967981

968982
// Solaris: /dev/poll.
@@ -979,7 +993,7 @@
979993
# if defined(ASIO_HAS_IOCP) \
980994
|| !defined(ASIO_WINDOWS) \
981995
&& !defined(ASIO_WINDOWS_RUNTIME) \
982-
&& !defined(__CYGWIN__)
996+
&& !defined(ASIO_CYGWIN_W32_SOCKETS)
983997
# if !defined(__SYMBIAN32__)
984998
# if !defined(ASIO_DISABLE_SERIAL_PORT)
985999
# define ASIO_HAS_SERIAL_PORT 1
@@ -988,7 +1002,7 @@
9881002
# endif // defined(ASIO_HAS_IOCP)
9891003
// || !defined(ASIO_WINDOWS)
9901004
// && !defined(ASIO_WINDOWS_RUNTIME)
991-
// && !defined(__CYGWIN__)
1005+
// && !defined(ASIO_CYGWIN_W32_SOCKETS)
9921006
#endif // !defined(ASIO_HAS_SERIAL_PORT)
9931007

9941008
// Windows: stream handles.
@@ -1012,11 +1026,12 @@
10121026
// Windows: object handles.
10131027
#if !defined(ASIO_HAS_WINDOWS_OBJECT_HANDLE)
10141028
# if !defined(ASIO_DISABLE_WINDOWS_OBJECT_HANDLE)
1015-
# if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
1029+
# if defined(ASIO_WINDOWS) || defined(ASIO_CYGWIN_W32_SOCKETS)
10161030
# if !defined(UNDER_CE) && !defined(ASIO_WINDOWS_APP)
10171031
# define ASIO_HAS_WINDOWS_OBJECT_HANDLE 1
10181032
# endif // !defined(UNDER_CE) && !defined(ASIO_WINDOWS_APP)
1019-
# endif // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
1033+
# endif // defined(ASIO_WINDOWS)
1034+
// || defined(ASIO_CYGWIN_W32_SOCKETS)
10201035
# endif // !defined(ASIO_DISABLE_WINDOWS_OBJECT_HANDLE)
10211036
#endif // !defined(ASIO_HAS_WINDOWS_OBJECT_HANDLE)
10221037

@@ -1034,11 +1049,11 @@
10341049
# if !defined(ASIO_DISABLE_POSIX_STREAM_DESCRIPTOR)
10351050
# if !defined(ASIO_WINDOWS) \
10361051
&& !defined(ASIO_WINDOWS_RUNTIME) \
1037-
&& !defined(__CYGWIN__)
1052+
&& !defined(ASIO_CYGWIN_W32_SOCKETS)
10381053
# define ASIO_HAS_POSIX_STREAM_DESCRIPTOR 1
10391054
# endif // !defined(ASIO_WINDOWS)
10401055
// && !defined(ASIO_WINDOWS_RUNTIME)
1041-
// && !defined(__CYGWIN__)
1056+
// && !defined(ASIO_CYGWIN_W32_SOCKETS)
10421057
# endif // !defined(ASIO_DISABLE_POSIX_STREAM_DESCRIPTOR)
10431058
#endif // !defined(ASIO_HAS_POSIX_STREAM_DESCRIPTOR)
10441059

@@ -1067,7 +1082,7 @@
10671082
# if defined(ASIO_HAS_IOCP) \
10681083
|| !defined(ASIO_WINDOWS) \
10691084
&& !defined(ASIO_WINDOWS_RUNTIME) \
1070-
&& !defined(__CYGWIN__)
1085+
&& !defined(ASIO_CYGWIN_W32_SOCKETS)
10711086
# if !defined(__SYMBIAN32__)
10721087
# if !defined(ASIO_DISABLE_PIPE)
10731088
# define ASIO_HAS_PIPE 1
@@ -1076,19 +1091,19 @@
10761091
# endif // defined(ASIO_HAS_IOCP)
10771092
// || !defined(ASIO_WINDOWS)
10781093
// && !defined(ASIO_WINDOWS_RUNTIME)
1079-
// && !defined(__CYGWIN__)
1094+
// && !defined(ASIO_CYGWIN_W32_SOCKETS)
10801095
#endif // !defined(ASIO_HAS_PIPE)
10811096

10821097
// Can use sigaction() instead of signal().
10831098
#if !defined(ASIO_HAS_SIGACTION)
10841099
# if !defined(ASIO_DISABLE_SIGACTION)
10851100
# if !defined(ASIO_WINDOWS) \
10861101
&& !defined(ASIO_WINDOWS_RUNTIME) \
1087-
&& !defined(__CYGWIN__)
1102+
&& !defined(ASIO_CYGWIN_W32_SOCKETS)
10881103
# define ASIO_HAS_SIGACTION 1
10891104
# endif // !defined(ASIO_WINDOWS)
10901105
// && !defined(ASIO_WINDOWS_RUNTIME)
1091-
// && !defined(__CYGWIN__)
1106+
// && !defined(ASIO_CYGWIN_W32_SOCKETS)
10921107
# endif // !defined(ASIO_DISABLE_SIGACTION)
10931108
#endif // !defined(ASIO_HAS_SIGACTION)
10941109

@@ -1104,7 +1119,7 @@
11041119
// Can use getaddrinfo() and getnameinfo().
11051120
#if !defined(ASIO_HAS_GETADDRINFO)
11061121
# if !defined(ASIO_DISABLE_GETADDRINFO)
1107-
# if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
1122+
# if defined(ASIO_WINDOWS) || defined(ASIO_CYGWIN_W32_SOCKETS)
11081123
# if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0501)
11091124
# define ASIO_HAS_GETADDRINFO 1
11101125
# elif defined(UNDER_CE)
@@ -1138,9 +1153,9 @@
11381153
# endif // !defined(BOOST_NO_EXCEPTIONS)
11391154
#endif // !defined(ASIO_NO_EXCEPTIONS)
11401155
#if defined(ASIO_NO_EXCEPTIONS)
1141-
# define ASIO_VERSION_TAG_k k
1156+
# define ASIO_VERSION_TAG_l l
11421157
#else // defined(ASIO_NO_EXCEPTIONS)
1143-
# define ASIO_VERSION_TAG_k
1158+
# define ASIO_VERSION_TAG_l
11441159
#endif // defined(ASIO_NO_EXCEPTIONS)
11451160

11461161
// Whether the typeid operator is supported.
@@ -1174,9 +1189,9 @@
11741189
# endif // !defined(ASIO_DISABLE_THREADS)
11751190
#endif // !defined(ASIO_HAS_THREADS)
11761191
#if defined(ASIO_HAS_THREADS)
1177-
# define ASIO_VERSION_TAG_l l
1192+
# define ASIO_VERSION_TAG_m m
11781193
#else // defined(ASIO_HAS_THREADS)
1179-
# define ASIO_VERSION_TAG_l
1194+
# define ASIO_VERSION_TAG_m
11801195
#endif // defined(ASIO_HAS_THREADS)
11811196

11821197
// POSIX threads.
@@ -1192,9 +1207,9 @@
11921207
# endif // defined(ASIO_HAS_THREADS)
11931208
#endif // !defined(ASIO_HAS_PTHREADS)
11941209
#if defined(ASIO_HAS_PTHREADS)
1195-
# define ASIO_VERSION_TAG_m m
1210+
# define ASIO_VERSION_TAG_n n
11961211
#else // defined(ASIO_HAS_PTHREADS)
1197-
# define ASIO_VERSION_TAG_m
1212+
# define ASIO_VERSION_TAG_n
11981213
#endif // defined(ASIO_HAS_PTHREADS)
11991214

12001215
// Helper to prevent macro expansion.
@@ -1578,9 +1593,9 @@
15781593
# endif // !defined(ASIO_DISABLE_STD_ATOMIC_WAIT)
15791594
#endif // !defined(ASIO_HAS_STD_ATOMIC_WAIT)
15801595
#if defined(ASIO_HAS_STD_ATOMIC_WAIT)
1581-
# define ASIO_VERSION_TAG_n n
1596+
# define ASIO_VERSION_TAG_o o
15821597
#else // defined(ASIO_HAS_STD_ATOMIC_WAIT)
1583-
# define ASIO_VERSION_TAG_n
1598+
# define ASIO_VERSION_TAG_o
15841599
#endif // defined(ASIO_HAS_STD_ATOMIC_WAIT)
15851600

15861601
// Token-pasting helper (two levels needed to allow macro arguments to expand).
@@ -1589,9 +1604,9 @@
15891604

15901605
// Version tags for user-enabled features with no auto-detection in this file.
15911606
#if defined(ASIO_ENABLE_HANDLER_TRACKING)
1592-
# define ASIO_VERSION_TAG_o o
1607+
# define ASIO_VERSION_TAG_p p
15931608
#else // defined(ASIO_ENABLE_HANDLER_TRACKING)
1594-
# define ASIO_VERSION_TAG_o
1609+
# define ASIO_VERSION_TAG_p
15951610
#endif // defined(ASIO_ENABLE_HANDLER_TRACKING)
15961611

15971612
// Automatic version namespace v<ASIO_VERSION>_<tags>.
@@ -1615,7 +1630,8 @@
16151630
ASIO_DETAIL_CAT(ASIO_VERSION_TAG_l, \
16161631
ASIO_DETAIL_CAT(ASIO_VERSION_TAG_m, \
16171632
ASIO_DETAIL_CAT(ASIO_VERSION_TAG_n, \
1618-
ASIO_VERSION_TAG_o)))))))))))))))))
1633+
ASIO_DETAIL_CAT(ASIO_VERSION_TAG_o, \
1634+
ASIO_VERSION_TAG_p))))))))))))))))))
16191635
# endif // !defined(ASIO_VERSION_NAMESPACE)
16201636
#endif // defined(ASIO_ENABLE_VERSION_NAMESPACE)
16211637

include/asio/detail/descriptor_ops.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
#if !defined(ASIO_WINDOWS) \
2121
&& !defined(ASIO_WINDOWS_RUNTIME) \
22-
&& !defined(__CYGWIN__)
22+
&& !defined(ASIO_CYGWIN_W32_SOCKETS)
2323

2424
#include <cstddef>
2525
#include "asio/error.hpp"
@@ -176,6 +176,6 @@ ASIO_INLINE_NAMESPACE_END
176176

177177
#endif // !defined(ASIO_WINDOWS)
178178
// && !defined(ASIO_WINDOWS_RUNTIME)
179-
// && !defined(__CYGWIN__)
179+
// && !defined(ASIO_CYGWIN_W32_SOCKETS)
180180

181181
#endif // ASIO_DETAIL_DESCRIPTOR_OPS_HPP

0 commit comments

Comments
 (0)