Browse Source

COMP: Fix references to cin, cout, cerr, and clog in case of HP aCC compiler with -mt flag.

Brad King 19 years ago
parent
commit
475c37b6a5
1 changed files with 53 additions and 3 deletions
  1. 53 3
      Source/kwsys/kwsys_ios_iostream.h.in

+ 53 - 3
Source/kwsys/kwsys_ios_iostream.h.in

@@ -28,17 +28,67 @@
 # include <iostream.h>
 #endif
 
+// The HP implementation of iostream defines cin, cout, cerr, and clog
+// as macros in order to do thread-private streams.
+// See /opt/aCC/include/iostream/iostream.h for details.
+// This block redefines the macros in a safe way that is also compatible
+// with the HP definitions and the using declarations below.
+
+#if !@KWSYS_NAMESPACE@_IOS_USE_SSTREAM
+# if defined(__HP_aCC) && (defined(HP_THREAD_SAFE) || defined(_THREAD_SAFE))
+#  if defined(cin) && !defined(@KWSYS_NAMESPACE@_IOS_HP_HACK_CIN)
+#   define @KWSYS_NAMESPACE@_IOS_HP_HACK_CIN
+#   undef cin
+#   define cin __tcin.ref()
+#  endif
+#  if defined(cout) && !defined(@KWSYS_NAMESPACE@_IOS_HP_HACK_COUT)
+#   define @KWSYS_NAMESPACE@_IOS_HP_HACK_COUT
+#   undef cout
+#   define cout __tcout.ref()
+#  endif
+#  if defined(cerr) && !defined(@KWSYS_NAMESPACE@_IOS_HP_HACK_CERR)
+#   define @KWSYS_NAMESPACE@_IOS_HP_HACK_CERR
+#   undef cerr
+#   define cerr __tcerr.ref()
+#  endif
+#  if defined(clog) && !defined(@KWSYS_NAMESPACE@_IOS_HP_HACK_CLOG)
+#   define @KWSYS_NAMESPACE@_IOS_HP_HACK_CLOG
+#   undef clog
+#   define clog __tclog.ref()
+#  endif
+# endif
+#endif
+
+// If using our own sstream emulation code, put the standard
+// streams in the same namespace.
 #if !@KWSYS_NAMESPACE@_IOS_USE_SSTREAM
 namespace @KWSYS_NAMESPACE@_ios
 {
   using @KWSYS_NAMESPACE@_ios_namespace::ostream;
   using @KWSYS_NAMESPACE@_ios_namespace::istream;
   using @KWSYS_NAMESPACE@_ios_namespace::ios;
-  using @KWSYS_NAMESPACE@_ios_namespace::cout;
-  using @KWSYS_NAMESPACE@_ios_namespace::cerr;
-  using @KWSYS_NAMESPACE@_ios_namespace::cin;
   using @KWSYS_NAMESPACE@_ios_namespace::endl;
   using @KWSYS_NAMESPACE@_ios_namespace::flush;
+# if defined(@KWSYS_NAMESPACE@_IOS_HP_HACK_CIN)
+  using @KWSYS_NAMESPACE@_ios_namespace::__tcin;
+# else
+  using @KWSYS_NAMESPACE@_ios_namespace::cin;
+# endif
+# if defined(@KWSYS_NAMESPACE@_IOS_HP_HACK_COUT)
+  using @KWSYS_NAMESPACE@_ios_namespace::__tcout;
+# else
+  using @KWSYS_NAMESPACE@_ios_namespace::cout;
+# endif
+# if defined(@KWSYS_NAMESPACE@_IOS_HP_HACK_CERR)
+  using @KWSYS_NAMESPACE@_ios_namespace::__tcerr;
+# else
+  using @KWSYS_NAMESPACE@_ios_namespace::cerr;
+# endif
+# if defined(@KWSYS_NAMESPACE@_IOS_HP_HACK_CLOG)
+  using @KWSYS_NAMESPACE@_ios_namespace::__tclog;
+# else
+  using @KWSYS_NAMESPACE@_ios_namespace::clog;
+# endif
 }
 #endif