ACE DEFINES
-----------------------------------------------------------------------------

The following describes the meaning of the C++ compiler macros that
may be set in the DEFFLAGS Makefile macro.  When you port ACE to a new
platform and/or C++ compiler, make sure that you check to see which of
these need to be defined.  Eventually, all this information should be
auto-discovered...

Macro					Description
-----					-----------
ACE_HAS_ALLOCA				Compiler/platform supports alloca()
ACE_HAS_AUTOMATIC_INIT_FINI 		Compiler/platform correctly calls init()/fini() 
					for shared libraries
ACE_HAS_POLL				Platform contains <poll.h>
ACE_HAS_POSIX_NONBLOCK			Platform supports POSIX O_NONBLOCK semantics
ACE_HAS_CONSISTENT_SIGNAL_PROTOTYPES 	Prototypes for both signal() 
					and struct sigaction are consistent.
ACE_HAS_CPLUSPLUS_HEADERS		Compiler/platform has correctly prototyped header files
ACE_HAS_HI_RES_TIMER			Compiler/platform supports SunOS high resolution timers
ACE_HAS_LONGLONG_T			Compiler/platform supports the "long long" datatype.
ACE_HAS_MT_SAFE_SOCKETS			Sockets may be called in multi-threaded programs
ACE_SELECT_USES_INT			Platform uses int for select() rather than fd_set
ACE_HAS_NO_T_ERRNO			Header files lack t_errno for TLI
ACE_HAS_PTHREADS			ACE supports POSIX Pthreads
ACE_HAS_PROC_FS				Platform supports the /proc file system
ACE_HAS_POSIX_TIMERS			Platform supports the POSIX timestruc_t type
ACE_HAS_PRUSAGE_T			Platform supports the prusage_t struct
ACE_HAS_OLD_MALLOC			Compiler/platform uses old malloc()/free() 
					prototypes (ugh)
ACE_HAS_RTLD_LAZY_V			Explicit dynamic linking permits "lazy" 
					symbol resolution
ACE_HAS_SEMUN				Compiler/platform defines a union semun for 
					SysV shared memory
ACE_HAS_SETOWN				Compiler/platform defines the F_SETOWN macro
ACE_HAS_SIG_ATOMIC_T			Compiler/platform defines the sig_atomic_t typedef
ACE_HAS_SIGINFO_T			Platform supports SVR4 extended signals
ACE_HAS_SOCKIO_H                	Compiler/platform provides the sockio.h file
ACE_HAS_SSIZE_T				Compiler supports the ssize_t typedef
ACE_HAS_STREAMS				Platform supports STREAMS
ACE_HAS_STREAM_PIPES			Platform supports STREAM pipes
ACE_HAS_STRERROR			Compiler/platform supports strerror ()
ACE_HAS_STRBUF_T			Compiler/platform supports struct strbuf
ACE_HAS_SVR4_DYNAMIC_LINKING		Compiler/platform supports SVR4 dynamic 
					linking semantics
ACE_HAS_SVR4_GETTIMEOFDAY		Compiler/platform supports SVR4 gettimeofday() 
					prototype
ACE_HAS_SVR4_POLL			Compiler/platform supports the SVR4 poll()
ACE_HAS_SVR4_SIGNAL_T			Compiler/platform supports SVR4 signal typedef
ACE_HAS_SVR4_TLI			Compiler/platform supports SVR4 TLI (in particular, 
					T_GETNAME stuff)...
ACE_HAS_SYSENT_H			Platform provides <sysent.h> header
ACE_HAS_SYS_FILIO_H			Platform provides <sys/filio.h> header
ACE_HAS_SYS_SIGLIST			Compiler/platform supports sys_siglist array
ACE_HAS_TEMPLATE_TYPEDEFS		Compiler implements templates that support 
					typedefs inside of classes used as formal 
					arguments to a template class. 
ACE_MT_SAFE				Compile using multi-thread libraries
ACE_HAS_STHREADS			Platform supports Solaris threads
ACE_HAS_THREADS				Platform supports threads
ACE_HAS_THREAD_T			Compiler/platform defines thread_t typedef
ACE_HAS_OSF_TIMOD_H			Platform supports the OSF TLI timod STREAMS module
ACE_HAS_TIMOD_H				Platform supports TLI timod STREAMS module
ACE_HAS_TIUSER_H			Platform supports TLI tiuser header
ACE_HAS_TLI_PROTOTYPES			Platform provides TLI function prototypes
ACE_HAS_TLI				Platform supports TLI
ACE_NLOGGING				Turns off the LM_DEBUG and LM_ERROR logging macros...
ACE_NTRACE				Turns off the tracing feature.
ACE_NEEDS_WRITEV			Platform doesn't define readv/writev, so use our own
ACE_PAGE_SIZE				Defines the page size of the system

----------------------------------------

The following is a list of where these macros are used in the code.
This list was compiled by Jam Hamidi (jh1@core01.osi.com).

ACE_HAS_ALLOCA:
---------------

  Used in:
     libsrc/IPC_SAP/SOCK_SAP/SOCK_Connect.C
        for allocation of iovp
     libsrc/IPC_SAP/SPIPE_SAP/SPIPE_Msg.C
        for alocation of iovp

  In solaris: 
     alloca() allocates size bytes of space in the stack frame of
     the  caller,  and  returns a pointer to the allocated block.
     This temporary space is automatically freed when the  caller
     returns.  Note: if the allocated block is beyond the current
     stack limit, the resulting behavior is undefined.

  In HPUX:
     no equivalent.

  Notes:
     in HPUX it has to do new and delete. Affects performance.


ACE_HAS_AUTOMATIC_INIT_FINI:
----------------------------

  Used in:
     libsrc/Service_Configurator/Service_Repository.i
     libsrc/Service_Configurator/Parse_Node.i
     include/Parse_Node.i
     include/Service_Repository.i

  In solaris:
     _init() initializes a loadable module. It is  called  before
     any other routine in a loadable module.
     _info()  returns  information  about  a   loadable   module.
     _fini() should return the return value from mod_remove(9F).
     This flag if set, doesn't do anything.  If not set, forces
     _init() and _fini() to be executed as is:
       dlsym ((char *) handle, "_fini").

  In HPUX:
     don't set.
     Maybe have to look into shl_load( ), shl_definesym( ), 
     shl_findsym( ), shl_gethandle( ), shl_getsymbols( ), 
     shl_unload( ), shl_get( )(3X) - explicit load of shared libraries
     Means Service Configurator won't be available.
     TBA.
    

ACE_HAS_CPLUSPLUS_HEADERS:
--------------------------

  Used In:
     sysincludes.h

  HPUX:
     set it.

  Notes:
     If this is not defined, libc.h and osfcn.h get included.
     Only needed for older compiler/OS platforms that don't 
     provide standard C++ header files in /usr/include.

ACE_HAS_HI_RES_TIMER:
---------------------

  Used In:
     libsrc/Misc/High_Res_Timer.h
     libsrc/Misc/High_Res_Timer.C
     include/High_Res_Timer.h

  In Solaris,
     C++ wrapper around gethrtime(), which returns a long long.
	 gethrtime() returns the current high-resolution  real  time.
     Time  is  expressed as nanoseconds since some arbitrary time
     in the past; it is not correlated in any way to the time  of
     day,  and  thus  is not subject to resetting, drifting, etc.

  In HPUX
     look into: getclock(), reltimer(), getitimer()
     maybe even vtimes structure vm_utime, vm_stime ?

  Notes:
     TBA


ACE_HAS_LONGLONG_T:
-------------------

  Used In:
     libsrc/Misc/High_Res_Timer.i
     libsrc/Misc/High_Res_Timer.C
     include/High_Res_Timer.i

  Solaris:
     has long long

  HPUX:
     doesn't.
     

ACE_HAS_NO_T_ERRNO:
-------------------

  Used In:
     include/sysincludes.h

  HPUX:
     set it.

  Notes:
     if set, adds: 
     extern int t_errno;


ACE_HAS_POSIX_NONBLOCK:
-----------------------

  Used in:
     include/sysincludes.h

  HPUX:
     set it.

  Notes:
     if defined, sets ACE_NONBLOCK and O_NONBLOCK
     O_NONBLOCK is used in libsrc/Misc/misc.C to do a 
       fcntl (fd, F_SETFL, opt)
     ACE_NONBLOCK is used in libsrc/IPC_SAP/FIFO_SAP/FIFO_Recv.C in the
       disable member function and options passed to the open function
       in libsrc/IPC_SAP/FIFO_SAP/FIFO.C


ACE_HAS_PROC_FS:
----------------

  Used in:
     include/sysincludes.h
     libsrc/Misc/Profile_Timer.i

  Notes:
     if set, includes <sys/procfs.h>
     the PIOCUSAGE define is used in Profile_Timer.

  Solaris:
     procfs.h defines things for the prpsinfo structure (basically to
     do a "ps" from inside a program).

  HPUX:
     don't set: obviously a different mechanism.
     Look into /usr/include/sys/proc.h.  The structure is proc.  The
     pointer to the kernel's proc table may be obtained by 
     extern  struct  proc *proc, *procNPROC;
     extern  int nproc;


ACE_HAS_PRUSAGE_T:
------------------

  Used in:
     libsrc/Misc/Profile_Timer.h
     libsrc/Misc/Profile_Timer.C

  Notes:
     If defined, declares the Profile_Timer class that does start(),
     stop() and basically gets real_time, user_time, system_time for
     an interval.
     This stuff is highly non-portable.

  HPUX:
     don't set
  

ACE_HAS_RTLD_LAZY_V:
--------------------

  Used in:
     include/sysincludes.h

  Notes:
     if not defined, does a:
     #defines RTLD_LAZY 1.
     This is the mode argument passed to dlopen(path,mode), used in
     libsrc/Service_Configurator/Parse_Node.i

  Solaris:
     dlopen() is one of a family of routines that give  the  user
     direct  access  to  the  dynamic  linking  facilities.  (SEE
     SunOS 5.3 Linker and Libraries Manual ).  These routines are
     made  available  via the library loaded when the option -ldl
     is passed to the link-editor.

     These routines are available to dynamically  linked  execut-
     ables ONLY.

  HPUX:
     don't set.
     look into:
     shl_load( ), shl_definesym( ), shl_findsym( ), shl_gethandle( ), 
     shl_getsymbols( ), shl_unload( ), shl_get( )(3X) 
     - explicit load of shared libraries


ACE_HAS_SEMUN:
--------------

  Used in:
     libsrc/Semaphores/Semaphore_Simple.h

  Notes:
     if not defined, defines semun as:
     union semun {
	   int		val;	/* value for SETVAL */
	   struct semid_ds	*buf;	/* buffer for IPC_STAT & IPC_SET */
	   ushort		*array;	/* array for GETALL & SETALL */
     };

  HPUX:
     don't set.
     in /usr/include/sem.h:
     /* The fourth argument to semctl() varies depending on the value of
       its first argument.  If desired, "union semun" can be declared
       by the user, but this is not necessary since the individual
       member can just be passed as the argument. */


ACE_HAS_SIG_ATOMIC_T:
---------------------

  Used in:
     include/sysincludes.h

  Notes:
     if not defined, does a:
     typedef int sig_atomic_t;
     This is used in the Reactor and service configurator.

  HPUX:
     set it.
     in /usr/include/sys/signal.h:
     typedef unsigned int sig_atomic_t;
  

ACE_HAS_SSIZE_T:
----------------

  Used in:
     include/sysincludes.h

  Notes:
     if not defined, does a
     typedef int ssize_t;
     used mostly in IPC_SAP.  (don't confuse with size_t).

  HPUX:
     set it.
     in /usr/include/sys/types.h


ACE_HAS_STRBUF_T:
-----------------

  Used in:
     include/Str_Buf.h

  Notes:
     if not defined, declares the strbuf structure as:
     struct strbuf
     {
       int	maxlen;			/* no. of bytes in buffer */
       int	len;			/* no. of bytes returned */
       void	*buf;			/* pointer to data */
     };
  
  Solaris:
     defined in /usr/include/sys/stropts.h
     Sys V.4 Streams.
     uses strbuf as parameter to putmsg, putpmsg:
     int putmsg(int fildes, const struct strbuf *ctlptr,
          const struct strbuf *dataptr, int flags);

  HPUX:
     don't set.
     no SYS V.4 streams.


ACE_HAS_STREAMS:
----------------

  Used In:
     include/sysincludes.h
     libsrc/IPC_SAP/SOCK_SAP/LSOCK.C
     
  Notes:
     if defined, includes <stropts.h>

  HPUX:
     don't set.
     no SYS V.4 streams.


ACE_HAS_STREAM_PIPES:
---------------------

  Used in:
     libsrc/IPC_SAP/SPIPE_SAP/SPIPE_Msg.h
     libsrc/IPC_SAP/SPIPE_SAP/SPIPE_Msg.C
     libsrc/IPC_SAP/SPIPE_SAP/SPIPE_Listener.h
     libsrc/IPC_SAP/SPIPE_SAP/SPIPE_Listener.C
     libsrc/IPC_SAP/SPIPE_SAP/SPIPE.h
     libsrc/IPC_SAP/SPIPE_SAP/SPIPE.C
     libsrc/IPC_SAP/FIFO_SAP/FIFO_Send_Msg.h
     libsrc/IPC_SAP/FIFO_SAP/FIFO_Send_Msg.C
     libsrc/IPC_SAP/FIFO_SAP/FIFO_Send_Msg.i
     libsrc/IPC_SAP/FIFO_SAP/FIFO_Recv_Msg.h
     libsrc/IPC_SAP/FIFO_SAP/FIFO_Recv_Msg.C
     libsrc/IPC_SAP/FIFO_SAP/FIFO_Recv_Msg.i

  Notes:
     if not set, won't be able to use the SPIPE class (IPC_SAP) with
     rendezvous handles.

  HPUX:
     don't set.
     No sysV.4 streams.
     

ACE_HAS_STRERROR:
-----------------

  Used in:
     include/sysincludes.h

  Notes:
     if not defined, does a:
     #define strerror(err) sys_errlist[err]

  Solaris:
     /usr/include/string.h

  HPUX:
     set it.
     in /usr/include/sys/errno.h and string.h
     extern char *strerror (int);


ACE_HAS_SVR4_DYNAMIC_LINKING:
-----------------------------

  Used in:
     include/sysincludes.h
     tests/Service_Configurator/CCM_App.C

  Notes:
     if defined, includes <dlfcn.h>
     with dlopen(), dlsym(), etc..

  HPUX:
     don't set.
     has its own:
     shl_findsym( ), shl_gethandle( ), shl_getsymbols( ), 
     shl_unload( ), shl_get( )(3X) - explicit load of shared libraries
     

ACE_HAS_SVR4_GETTIMEOFDAY:
--------------------------

  Used in:
     include/sysincludes.h
     libsrc/Reactor/Timer_Queue.i

  Notes:
     has to do with gettimeofday ().

  Solaris:
     gettimeofday (struct timeval *tp)

  HPUX:
     don't set.
     it has gettimeofday (struct timeval *tp, struct timezone *tzp);
     most calls do a:
     #if defined (ACE_HAS_SVR4_GETTIMEOFDAY)
      ::gettimeofday (&cur_time);
     #else
      ::gettimeofday (&cur_time, 0);
     #endif /* ACE_HAS_SVR4_GETTIMEOFDAY */


ACE_HAS_POLL:
------------
  Used in:  
     include/sysincludes.h  	

  Notes:
     #if defined (ACE_HAS_POLL)
     #include <poll.h>
     #endif /* ACE_HAS_POLL */

ACE_HAS_SVR4_POLL:
------------------

  Used in:
     include/sysincludes.h

  Notes:
     #if defined (ACE_HAS_SVR4_POLL)
     #define ACE_USE_POLL_IMPLEMENTATION
     #endif /* ACE_HAS_SVR4_POLL */

  HPUX:
     set it.


ACE_HAS_SVR4_SIGNAL_T:
----------------------

  Used in:
     include/sysincludes.h

  Notes:
     #if defined (ACE_HAS_SVR4_SIGNAL_T)
     typedef void (*SignalHandler)(int);
     typedef void (*SignalHandlerV)(void);
     #elif defined (ACE_HAS_SIGNALHANDLERV_INT_ARG)
     typedef void (*SignalHandler)(int);
     typedef void (*SignalHandlerV)(int);
     #else
     #define SignalHandler SIG_PF
     typedef void (*SignalHandlerV)(...);
     #endif /* ACE_HAS_SVR4_SIGNAL_T */

  HPUX:
     set it.


ACE_HAS_SVR4_TLI:
-----------------

  Used in:
     libsrc/IPC_SAP/TLI_SAP/TLI.C
     libsrc/IPC_SAP/TLI_SAP/TLI.h
     libsrc/IPC_SAP/TLI_SAP/TLI_Stream.C

  Notes:
     TLI is the transport layer calls as in: t_bind(), t_open(), t_unbind(),
     t_optmgmt(), ... in SunOS and Solaris.

  HPUX:
     don't set.
     Not supported.


ACE_HAS_SYS_FILIO_H:
--------------------

  Used in:
     include/sysincludes.h

  Notes:
     if not defined, includes <sys/filio.h>.
     didn't find any reference to anything in this file in the ACE code.

  Solaris:
     filio.h defines FIOCLEX, FIOASYNC, ... as _IO('f', 1), ..
     for FIOLFS,.. solaris has this to say:
     /*
      * ioctl's for Online: DiskSuite.
      * WARNING - the support for these ioctls may be withdrawn
      * in the future OS releases.
      */

  HPUX:
     <sys/ioctl.h> defines FIOASYNC and some other ones,
     <sgtty.h> defines some like FIOCLEX.
     some are never defined.
     use #ifdef HP-UX to modify sysincludes.h
  

ACE_HAS_SYS_SIGLIST:
--------------------

  Used in:
     include/sysincludes.h
     libsrc/Log_Msg/Log_Msg.C

  Notes:
     if not defined, does a:
     extern const char **_sys_siglist;
  
  Solaris:
     This is an array holding signal descriptions.

  HPUX:
     don't set.
     Some additional work is required.  In libsrc/Log_Msg/Log_Msg.C,
     sys_siglist is used regardless of ACE_HAS_SYS_SIGLIST.
     have to add #ifdefs to remove them.


ACE_HAS_TEMPLATE_TYPEDEFS:
--------------------------

  Used in:
     libsrc/ASX/*.[Chi]	

  Notes:
     cfront-based C++ compilers don't implement templates that support
     classes with typedefs of other types as formal arguments.  This
     typedef uses the C++ preprocessor to work around this problem.

ACE_HAS_THREADS:
----------------

  Used in:
     libsrc/Service_Configurator/Service_Record.i
     libsrc/Service_Configurator/Svc_Conf.y.C
     libsrc/Service_Configurator/Thread_Spawn.i
     libsrc/Threads/Synch.C
     libsrc/Threads/Synch.i
     libsrc/Threads/Thr_Manager.i
     libsrc/ASX/STREAM.C
     libsrc/ASX/Queue.C
     libsrc/ASX/Module.C
     libsrc/ASX/Stream_Modules.C
     libsrc/ASX/Multiplexor.C
     libsrc/ASX/Message_List.C
     include/Message_List.h
     include/Module.h
     include/Multiplexor.h
     include/Queue.h
     include/STREAM.h
     include/Stream_Modules.h
     include/Service_Record.h
     include/Thread_Spawn.h
     include/Synch.h
     include/Thr_Manager.h

  Notes:
     We use Message_List.h even in a non-threaded environment.
     our XOMessageList.h does this by #ifdefs around Threaded things.

  HPUX:
     not until 10.0.


ACE_HAS_THREAD_T:
-----------------

  Used in:
     include/sysincludes.h

  Notes:
     #if !defined (ACE_HAS_THREAD_T) 
     typedef int thread_t;
     #endif /* !ACE_HAS_THREAD_T */

  HPUX:
     don't set.


ACE_HAS_TIMOD_H:
----------------

  Used in:
     include/sysincludes.h

  Notes:
     if defined, include <sys/timod.h>

  Solaris:
     timod is a STREAMS module for use with the Transport  Inter-
     face  (TI)  functions  of the Network Services library.  The
     timod module converts a set of ioctl(2) calls  into  STREAMS
     messages  that  may be consumed by a transport protocol pro-
     vider that supports the Transport Interface.  This allows  a
     user to initiate certain TI functions as atomic operations.

  HPUX:
     don't set.


ACE_HAS_TIUSER_H:
-----------------

  Used in:
     include/sysincludes.h

  Notes:
     if set, includes <tiuser.h>

  Solaris:
     in conjunction with t_bind, t_accept, etc.. transport layer.

  HPUX:
     don't set.


ACE_USE_POLL_IMPLEMENTATION:
----------------------------

  Used in:
     libsrc/Reactor/Reactor.i
     include/Event_Handler.h
     include/sysincludes.h
     include/Reactor.h

  Notes:
     in the reactor, use poll instead of select.  In general,
     good thing to have set.

     Don't set this, it will get set by ACE_HAS_SVR4_POLL

