7152503847e19c405a75c1bfa00beeb351792445
[perl.git] / os2 / config.h
1 /* config.h
2  * This file was hand tailored for compiling under MS-DOS and MSC 5.1.
3  * Diomidis Spinellis, March 1990.
4  *
5  * Then it got mangled again for compiling under OS/2 and MSC 6.0.
6  * Raymond Chen, June 1990.
7  */
8 #define OS2             /**/
9
10 /* OS/2 supports some additional things MS-DOS doesn't.
11  */
12 #ifdef OS2
13 #define PIPE
14 #define GETPPID
15 #define GETPRIORITY
16 #define SETPRIORITY
17 #define SYSCALL
18 #define KILL
19 #endif /* OS2 */
20
21 /* SUFFIX:
22  *      This symbol, if defined, indicates that the function add_suffix has
23  *      been supplied in a system-dependent .c file.  This function is
24  *      recommended for operating systems whose filenaming conventions
25  *      do not permit arbitrary strings as filenames.
26  */
27 #define SUFFIX  /**/
28
29 /* EUNICE:
30  *      This symbol, if defined, indicates that the program is being compiled
31  *      under the EUNICE package under VMS.  The program will need to handle
32  *      things like files that don't go away the first time you unlink them,
33  *      due to version numbering.  It will also need to compensate for lack
34  *      of a respectable link() command.
35  */
36 /* VMS:
37  *      This symbol, if defined, indicates that the program is running under
38  *      VMS.  It is currently only set in conjunction with the EUNICE symbol.
39  */
40 /*#undef        EUNICE          /**/
41 /*#undef        VMS             /**/
42
43 /* BIN:
44  *      This symbol holds the name of the directory in which the user wants
45  *      to put publicly executable images for the package in question.  It
46  *      is most often a local directory such as /usr/local/bin.
47  */
48 #define BIN "/usr/local/bin"             /**/
49
50 /* BYTEORDER:
51  *      This symbol contains an encoding of the order of bytes in a long.
52  *      Usual values (in octal) are 01234, 04321, 02143, 03412...
53  */
54 /* CHECK */
55 #define BYTEORDER 0x1234                /**/
56
57 /* CPPSTDIN:
58  *      This symbol contains the first part of the string which will invoke
59  *      the C preprocessor on the standard input and produce to standard
60  *      output.  Typical value of "cc -{" or "/lib/cpp".
61  */
62 /* CPPMINUS:
63  *      This symbol contains the second part of the string which will invoke
64  *      the C preprocessor on the standard input and produce to standard
65  *      output.  This symbol will have the value "-" if CPPSTDIN needs a minus
66  *      to specify standard input, otherwise the value is "".
67  */
68 /* TODO */
69 #define CPPSTDIN "cc -{"
70 #define CPPMINUS ""
71
72 /* BCMP:
73  *      This symbol, if defined, indicates that the bcmp routine is available
74  *      to compare blocks of memory.  If undefined, use memcmp.  If that's
75  *      not available, roll your own.
76  */
77 /*#define       BCMP            /**/
78
79 /* BCOPY:
80  *      This symbol, if defined, indicates that the bcopy routine is available
81  *      to copy blocks of memory.  Otherwise you should probably use memcpy().
82  */
83 /*#define       BCOPY           /**/
84
85 /* CHARSPRINTF:
86  *      This symbol is defined if this system declares "char *sprintf()" in
87  *      stdio.h.  The trend seems to be to declare it as "int sprintf()".  It
88  *      is up to the package author to declare sprintf correctly based on the
89  *      symbol.
90  */
91 /*#define       CHARSPRINTF     /**/
92
93 /* CRYPT:
94  *      This symbol, if defined, indicates that the crypt routine is available
95  *      to encrypt passwords and the like.
96  */
97 /* TODO */
98 /*#define       CRYPT           /**/
99
100 /* DOSUID:
101  *      This symbol, if defined, indicates that the C program should
102  *      check the script that it is executing for setuid/setgid bits, and
103  *      attempt to emulate setuid/setgid on systems that have disabled
104  *      setuid #! scripts because the kernel can't do it securely.
105  *      It is up to the package designer to make sure that this emulation
106  *      is done securely.  Among other things, it should do an fstat on
107  *      the script it just opened to make sure it really is a setuid/setgid
108  *      script, it should make sure the arguments passed correspond exactly
109  *      to the argument on the #! line, and it should not trust any
110  *      subprocesses to which it must pass the filename rather than the
111  *      file descriptor of the script to be executed.
112  */
113 /*#define DOSUID                /**/
114
115 /* DUP2:
116  *      This symbol, if defined, indicates that the dup2 routine is available
117  *      to dup file descriptors.  Otherwise you should use dup().
118  */
119 #define DUP2            /**/
120
121 /* FCHMOD:
122  *      This symbol, if defined, indicates that the fchmod routine is available
123  *      to change mode of opened files.  If unavailable, use chmod().
124  */
125 /*#define       FCHMOD          /**/
126
127 /* FCHOWN:
128  *      This symbol, if defined, indicates that the fchown routine is available
129  *      to change ownership of opened files.  If unavailable, use chown().
130  */
131 /*#define       FCHOWN          /**/
132
133 /* FCNTL:
134  *      This symbol, if defined, indicates to the C program that it should
135  *      include fcntl.h.
136  */
137 /*#define       FCNTL           /**/
138
139 /* FLOCK:
140  *      This symbol, if defined, indicates that the flock() routine is
141  *      available to do file locking.
142  */
143 /*#define       FLOCK           /**/
144
145 /* GETGROUPS:
146  *      This symbol, if defined, indicates that the getgroups() routine is
147  *      available to get the list of process groups.  If unavailable, multiple
148  *      groups are probably not supported.
149  */
150 /*#define       GETGROUPS               /**/
151
152 /* GETHOSTENT:
153  *      This symbol, if defined, indicates that the gethostent() routine is
154  *      available to lookup host names in some data base or other.
155  */
156 /*#define       GETHOSTENT              /**/
157
158 /* GETPGRP:
159  *      This symbol, if defined, indicates that the getpgrp() routine is
160  *      available to get the current process group.
161  */
162 /*#define       GETPGRP         /**/
163
164 /* GETPRIORITY:
165  *      This symbol, if defined, indicates that the getpriority() routine is
166  *      available to get a process's priority.
167  */
168 /*#define       GETPRIORITY             /**/
169
170 /* HTONS:
171  *      This symbol, if defined, indicates that the htons routine (and friends)
172  *      are available to do network order byte swapping.
173  */
174 /* HTONL:
175  *      This symbol, if defined, indicates that the htonl routine (and friends)
176  *      are available to do network order byte swapping.
177  */
178 /* NTOHS:
179  *      This symbol, if defined, indicates that the ntohs routine (and friends)
180  *      are available to do network order byte swapping.
181  */
182 /* NTOHL:
183  *      This symbol, if defined, indicates that the ntohl routine (and friends)
184  *      are available to do network order byte swapping.
185  */
186 /*#define       HTONS           /**/
187 /*#define       HTONL           /**/
188 /*#define       NTOHS           /**/
189 /*#define       NTOHL           /**/
190
191 /* index:
192  *      This preprocessor symbol is defined, along with rindex, if the system
193  *      uses the strchr and strrchr routines instead.
194  */
195 /* rindex:
196  *      This preprocessor symbol is defined, along with index, if the system
197  *      uses the strchr and strrchr routines instead.
198  */
199 #define index strchr    /* cultural */
200 #define rindex strrchr  /*  differences? */
201
202 /* IOCTL:
203  *      This symbol, if defined, indicates that sys/ioctl.h exists and should
204  *      be included.
205  */
206 /*#define       IOCTL           /**/
207
208 /* KILLPG:
209  *      This symbol, if defined, indicates that the killpg routine is available
210  *      to kill process groups.  If unavailable, you probably should use kill
211  *      with a negative process number.
212  */
213 /*#define       KILLPG          /**/
214
215 /* MEMCMP:
216  *      This symbol, if defined, indicates that the memcmp routine is available
217  *      to compare blocks of memory.  If undefined, roll your own.
218  */
219 #define MEMCMP          /**/
220
221 /* MEMCPY:
222  *      This symbol, if defined, indicates that the memcpy routine is available
223  *      to copy blocks of memory.  Otherwise you should probably use bcopy().
224  *      If neither is defined, roll your own.
225  */
226 #define MEMCPY          /**/
227
228 /* MKDIR:
229  *      This symbol, if defined, indicates that the mkdir routine is available
230  *      to create directories.  Otherwise you should fork off a new process to
231  *      exec /bin/mkdir.
232  */
233 #define MKDIR           /**/
234
235 /* NDBM:
236  *      This symbol, if defined, indicates that ndbm.h exists and should
237  *      be included.
238  */
239 /*#define       NDBM            /**/
240
241 /* ODBM:
242  *      This symbol, if defined, indicates that dbm.h exists and should
243  *      be included.
244  */
245 /*#define       ODBM            /**/
246
247 /* READDIR:
248  *      This symbol, if defined, indicates that the readdir routine is available
249  *      from the C library to create directories.
250  */
251 #define READDIR         /**/
252
253 /* RENAME:
254  *      This symbol, if defined, indicates that the rename routine is available
255  *      to rename files.  Otherwise you should do the unlink(), link(), unlink()
256  *      trick.
257  */
258 #define RENAME          /**/
259
260 /* RMDIR:
261  *      This symbol, if defined, indicates that the rmdir routine is available
262  *      to remove directories.  Otherwise you should fork off a new process to
263  *      exec /bin/rmdir.
264  */
265 #define RMDIR           /**/
266
267 /* SETEGID:
268  *      This symbol, if defined, indicates that the setegid routine is available
269  *      to change the effective gid of the current program.
270  */
271 /*#define       SETEGID         /**/
272
273 /* SETEUID:
274  *      This symbol, if defined, indicates that the seteuid routine is available
275  *      to change the effective uid of the current program.
276  */
277 /*#define       SETEUID         /**/
278
279 /* SETPGRP:
280  *      This symbol, if defined, indicates that the setpgrp() routine is
281  *      available to set the current process group.
282  */
283 /*#define       SETPGRP         /**/
284
285 /* SETPRIORITY:
286  *      This symbol, if defined, indicates that the setpriority() routine is
287  *      available to set a process's priority.
288  */
289 /*#define       SETPRIORITY             /**/
290
291 /* SETREGID:
292  *      This symbol, if defined, indicates that the setregid routine is available
293  *      to change the real and effective gid of the current program.
294  */
295 /*#define       SETREGID                /**/
296
297 /* SETREUID:
298  *      This symbol, if defined, indicates that the setreuid routine is available
299  *      to change the real and effective uid of the current program.
300  */
301 /*#define       SETREUID                /**/
302
303 /* SETRGID:
304  *      This symbol, if defined, indicates that the setrgid routine is available
305  *      to change the real gid of the current program.
306  */
307 /*#define       SETRGID         /**/
308
309 /* SETRUID:
310  *      This symbol, if defined, indicates that the setruid routine is available
311  *      to change the real uid of the current program.
312  */
313 /*#define       SETRUID         /**/
314
315 /* SOCKET:
316  *      This symbol, if defined, indicates that the BSD socket interface is
317  *      supported.
318  */
319 /* SOCKETPAIR:
320  *      This symbol, if defined, indicates that the BSD socketpair call is
321  *      supported.
322  */
323 /* OLDSOCKET:
324  *      This symbol, if defined, indicates that the 4.1c BSD socket interface
325  *      is supported instead of the 4.2/4.3 BSD socket interface.
326  */
327 /*#undef SOCKET          /**/
328
329 /*#undef SOCKETPAIR      /**/
330
331 /*#undef        OLDSOCKET       /**/
332
333 /* STATBLOCKS:
334  *      This symbol is defined if this system has a stat structure declaring
335  *      st_blksize and st_blocks.
336  */
337 /*#define       STATBLOCKS      /**/
338
339 /* STDSTDIO:
340  *      This symbol is defined if this system has a FILE structure declaring
341  *      _ptr and _cnt in stdio.h.
342  */
343 #define STDSTDIO        /**/
344
345 /* STRUCTCOPY:
346  *      This symbol, if defined, indicates that this C compiler knows how
347  *      to copy structures.  If undefined, you'll need to use a block copy
348  *      routine of some sort instead.
349  */
350 #define STRUCTCOPY      /**/
351
352 /* SYMLINK:
353  *      This symbol, if defined, indicates that the symlink routine is available
354  *      to create symbolic links.
355  */
356 /*#define       SYMLINK         /**/
357
358 /* SYSCALL:
359  *      This symbol, if defined, indicates that the syscall routine is available
360  *      to call arbitrary system calls.  If undefined, that's tough.
361  */
362 /*#define       SYSCALL         /**/
363
364 /* TMINSYS:
365  *      This symbol is defined if this system declares "struct tm" in
366  *      in <sys/time.h> rather than <time.h>.  We can't just say
367  *      -I/usr/include/sys because some systems have both time files, and
368  *      the -I trick gets the wrong one.
369  */
370 /* I_SYSTIME:
371  *      This symbol is defined if this system has the file <sys/time.h>.
372  */
373 /*
374  * I_TIME:
375  *      This symbol is defined if time this  system has the file <time.h>.
376  */
377 /*#undef        TMINSYS         /**/
378 /*#define       I_SYSTIME       /**/
379 #define I_TIME
380
381 /* VARARGS:
382  *      This symbol, if defined, indicates to the C program that it should
383  *      include varargs.h.
384  */
385 #define VARARGS         /**/
386
387 /* vfork:
388  *      This symbol, if defined, remaps the vfork routine to fork if the
389  *      vfork() routine isn't supported here.
390  */
391 /*#undef        vfork fork      /**/
392
393 /* VOIDSIG:
394  *      This symbol is defined if this system declares "void (*signal())()" in
395  *      signal.h.  The old way was to declare it as "int (*signal())()".  It
396  *      is up to the package author to declare things correctly based on the
397  *      symbol.
398  */
399 #define VOIDSIG         /**/
400
401 /* VPRINTF:
402  *      This symbol, if defined, indicates that the vprintf routine is available
403  *      to printf with a pointer to an argument list.  If unavailable, you
404  *      may need to write your own, probably in terms of _doprnt().
405  */
406 /* CHARVSPRINTF:
407  *      This symbol is defined if this system has vsprintf() returning type
408  *      (char*).  The trend seems to be to declare it as "int vsprintf()".  It
409  *      is up to the package author to declare vsprintf correctly based on the
410  *      symbol.
411  */
412 #define VPRINTF         /**/
413 /*#undef        CHARVSPRINTF    /**/
414
415 /* GIDTYPE:
416  *      This symbol has a value like gid_t, int, ushort, or whatever type is
417  *      used to declare group ids in the kernel.
418  */
419 /* TODO */
420 #define GIDTYPE int             /**/
421
422 /* I_DIRENT:
423  *      This symbol, if defined, indicates to the C program that it should
424  *      include dirent.h.
425  */
426 /* DIRNAMLEN:
427  *      This symbol, if defined, indicates to the C program that the length
428  *      of directory entry names is provided by a d_namlen field.  Otherwise
429  *      you need to do strlen() on the d_name field.
430  */
431 /*#undef        I_DIRENT                /**/
432 #define DIRNAMLEN               /**/
433
434 /* I_FCNTL:
435  *      This symbol, if defined, indicates to the C program that it should
436  *      include fcntl.h.
437  */
438 #define I_FCNTL         /**/
439
440 /* I_GRP:
441  *      This symbol, if defined, indicates to the C program that it should
442  *      include grp.h.
443  */
444 /*#define       I_GRP           /**/
445
446 /* I_PWD:
447  *      This symbol, if defined, indicates to the C program that it should
448  *      include pwd.h.
449  */
450 /* PWQUOTA:
451  *      This symbol, if defined, indicates to the C program that struct passwd
452  *      contains pw_quota.
453  */
454 /* PWAGE:
455  *      This symbol, if defined, indicates to the C program that struct passwd
456  *      contains pw_age.
457  */
458 /*#define       I_PWD           /**/
459 /*#define       PWQUOTA         /**/
460 /*#undef        PWAGE           /**/
461
462 /* I_SYSDIR:
463  *      This symbol, if defined, indicates to the C program that it should
464  *      include sys/dir.h.
465  */
466 #define I_SYSDIR                /**/
467
468 /* I_SYSIOCTL:
469  *      This symbol, if defined, indicates that sys/ioctl.h exists and should
470  *      be included.
471  */
472 /*#define       I_SYSIOCTL              /**/
473
474 /* I_VARARGS:
475  *      This symbol, if defined, indicates to the C program that it should
476  *      include varargs.h.
477  */
478 #define I_VARARGS               /**/
479
480 /* INTSIZE:
481  *      This symbol contains the size of an int, so that the C preprocessor
482  *      can make decisions based on it.
483  */
484 #define INTSIZE 2               /**/
485
486 /* RANDBITS:
487  *      This symbol contains the number of bits of random number the rand()
488  *      function produces.  Usual values are 15, 16, and 31.
489  */
490 #define RANDBITS 31             /**/
491
492 /* SIG_NAME:
493  *      This symbol contains an list of signal names in order.
494  */
495 #ifdef OS2
496 #define SIG_NAME "ZERO","HUP","INT","QUIT","ILL","TRAP","IOT","EMT","FPE",\
497           /*      0      1     2     3      4      5     6     7    8 */\
498    "KILL","BUS","SEGV","SYS","PIPE","ALRM","TERM","USR1","USR2","CLD",\
499   /* 9     10     11    12    13     14     15     16     17    18 */\
500    "PWR","USR3","BREAK","ABRT"
501   /*19     20     21    22   */
502 #else
503 #define SIG_NAME "ZERO","HUP","INT","QUIT","ILL","TRAP","IOT","EMT","FPE","KILL","BUS","SEGV","SYS","PIPE","ALRM","TERM","URG","STOP","TSTP","CONT","CHLD","TTIN","TTOU","IO","XCPU","XFSZ","VTALRM","PROF","WINCH","USR1","USR2"               /**/
504 #endif /* OS2 */
505
506 /* STDCHAR:
507  *      This symbol is defined to be the type of char used in stdio.h.
508  *      It has the values "unsigned char" or "char".
509  */
510 #define STDCHAR char    /**/
511
512 /* UIDTYPE:
513  *      This symbol has a value like uid_t, int, ushort, or whatever type is
514  *      used to declare user ids in the kernel.
515  */
516 #define UIDTYPE int             /**/
517
518 /* VOIDFLAGS:
519  *      This symbol indicates how much support of the void type is given by this
520  *      compiler.  What various bits mean:
521  *
522  *          1 = supports declaration of void
523  *          2 = supports arrays of pointers to functions returning void
524  *          4 = supports comparisons between pointers to void functions and
525  *                  addresses of void functions
526  *
527  *      The package designer should define VOIDUSED to indicate the requirements
528  *      of the package.  This can be done either by #defining VOIDUSED before
529  *      including config.h, or by defining defvoidused in Myinit.U.  If the
530  *      latter approach is taken, only those flags will be tested.  If the
531  *      level of void support necessary is not present, defines void to int.
532  */
533 #ifndef VOIDUSED
534 #define VOIDUSED 7
535 #endif
536 #define VOIDFLAGS 7
537 #if (VOIDFLAGS & VOIDUSED) != VOIDUSED
538 #define void int                /* is void to be avoided? */
539 #define M_VOID          /* Xenix strikes again */
540 #endif
541
542 /* PRIVLIB:
543  *      This symbol contains the name of the private library for this package.
544  *      The library is private in the sense that it needn't be in anyone's
545  *      execution path, but it should be accessible by the world.  The program
546  *      should be prepared to do ^ expansion.
547  */
548 #define PRIVLIB "/usr/local/lib/perl"           /**/
549
550 /*
551  * BUGGY_MSC:
552  *      This symbol is defined if you are the unfortunate owner of a buggy
553  *      Microsoft C compiler and want to use intrinsic functions.  Versions
554  *      up to 5.1 are known conform to this definition.
555  */
556 /*#define BUGGY_MSC                     /**/
557
558 /*
559  * BINARY:
560  *      This symbol is defined if you run under an operating system that
561  *      distinguishes between binary and text files.  If so the function
562  *      setmode will be used to set the file into binary mode.
563  */
564 #define BINARY
565
566 #define S_ISUID 0
567 #define S_ISGID 0
568 #define CASTNEGFLOAT