Don't include termios.h unless ASIO_HAS_SERIAL_PORT is defined.
diff --git a/asio/include/asio/detail/reactive_serial_port_service.hpp b/asio/include/asio/detail/reactive_serial_port_service.hpp
index 2fcf8c7..5c3a9c3 100644
--- a/asio/include/asio/detail/reactive_serial_port_service.hpp
+++ b/asio/include/asio/detail/reactive_serial_port_service.hpp
@@ -23,11 +23,10 @@
 #include <string>
 #include "asio/detail/pop_options.hpp"
 
-#if !defined(BOOST_WINDOWS) && !defined(__CYGWIN__)
+#include "asio/serial_port_base.hpp"
 
-#include "asio/detail/push_options.hpp"
-#include <termios.h>
-#include "asio/detail/pop_options.hpp"
+#if defined(ASIO_HAS_SERIAL_PORT) \
+  && !defined(BOOST_WINDOWS) && !defined(__CYGWIN__)
 
 #include "asio/error.hpp"
 #include "asio/io_service.hpp"
@@ -261,7 +260,8 @@
 } // namespace detail
 } // namespace asio
 
-#endif // !defined(BOOST_WINDOWS) && !defined(__CYGWIN__)
+#endif // defined(ASIO_HAS_SERIAL_PORT)
+       //   && !defined(BOOST_WINDOWS) && !defined(__CYGWIN__)
 
 #include "asio/detail/pop_options.hpp"
 
diff --git a/asio/include/asio/serial_port_base.hpp b/asio/include/asio/serial_port_base.hpp
index 2f3d702..1cbd185 100644
--- a/asio/include/asio/serial_port_base.hpp
+++ b/asio/include/asio/serial_port_base.hpp
@@ -22,11 +22,24 @@
 #include <stdexcept>
 #include <boost/config.hpp>
 #include <boost/detail/workaround.hpp>
-#if !defined(BOOST_WINDOWS) && !defined(__CYGWIN__)
-# include <termios.h>
-#endif
 #include "asio/detail/pop_options.hpp"
 
+#if !defined(ASIO_DISABLE_SERIAL_PORT)
+# if defined(ASIO_HAS_IOCP) \
+    || !defined(BOOST_WINDOWS) && !defined(__CYGWIN__)
+#  define ASIO_HAS_SERIAL_PORT 1
+# endif // defined(ASIO_HAS_IOCP)
+#endif // !defined(ASIO_DISABLE_STREAM_HANDLE)
+
+#if defined(ASIO_HAS_SERIAL_PORT) \
+  || defined(GENERATING_DOCUMENTATION)
+
+#if !defined(BOOST_WINDOWS) && !defined(__CYGWIN__)
+# include "asio/detail/push_options.hpp"
+# include <termios.h>
+# include "asio/detail/pop_options.hpp"
+#endif // !defined(BOOST_WINDOWS) && !defined(__CYGWIN__)
+
 #include "asio/error_code.hpp"
 #include "asio/detail/socket_types.hpp"
 
@@ -152,6 +165,9 @@
 
 #undef ASIO_OPTION_STORAGE
 
+#endif // defined(ASIO_HAS_SERIAL_PORT)
+       //   || defined(GENERATING_DOCUMENTATION)
+
 #include "asio/detail/pop_options.hpp"
 
 #endif // ASIO_SERIAL_PORT_BASE_HPP
diff --git a/asio/include/asio/serial_port_service.hpp b/asio/include/asio/serial_port_service.hpp
index e77a53e..2008205 100644
--- a/asio/include/asio/serial_port_service.hpp
+++ b/asio/include/asio/serial_port_service.hpp
@@ -25,17 +25,11 @@
 
 #include "asio/error.hpp"
 #include "asio/io_service.hpp"
+#include "asio/serial_port_base.hpp"
 #include "asio/detail/service_base.hpp"
 #include "asio/detail/reactive_serial_port_service.hpp"
 #include "asio/detail/win_iocp_serial_port_service.hpp"
 
-#if !defined(ASIO_DISABLE_SERIAL_PORT)
-# if defined(ASIO_HAS_IOCP) \
-    || !defined(BOOST_WINDOWS) && !defined(__CYGWIN__)
-#  define ASIO_HAS_SERIAL_PORT 1
-# endif // defined(ASIO_HAS_IOCP)
-#endif // !defined(ASIO_DISABLE_STREAM_HANDLE)
-
 #if defined(ASIO_HAS_SERIAL_PORT) \
   || defined(GENERATING_DOCUMENTATION)