1/* generic.h -- anything you don't #undef at the end remains in effect. 2 The ONLY things that go in here are generic indicator flags; it's up 3 to your programs to declare and call things based on those flags. 4 5 You should only need to make changes via a minimal system-specific section 6 at the end of this file. To build a new section, rip through this and 7 check everything it mentions on your platform, and #undef that which needs 8 it. If you generate a system-specific section you didn't find in here, 9 please mail me a copy so I can update the "master". 10 11 I realize I'm probably inventing another pseudo-standard here, but 12 goddamnit, everybody ELSE has already, and I can't include all of their 13 hairball schemes too. HAVE_xx conforms to the gnu/autoconf usage and 14 seems to be the most common format. In fact, I dug a lot of these out 15 of autoconf and tried to common them all together using "stupidh" to 16 collect data from platforms. 17 18 In disgust... _H* 940910, 941115, 950511. Pseudo-version: 1.3 19 20 Updated 951104 with many patches from netcat feedback, and properly 21 closed a lot of slop in open-ended comments: version 1.4 22 960217 + nextstep: version 1.5 23*/ 24 25#ifndef GENERIC_H /* only run through this once */ 26#define GENERIC_H 27 28/* =============================== */ 29/* System calls, lib routines, etc */ 30/* =============================== */ 31 32/* How does your system declare malloc, void or char? Usually void, but go 33 ask the SunOS people why they had to be different... */ 34#define VOID_MALLOC 35 36/* notably from fwtk/firewall.h: posix locking? */ 37#define HAVE_FLOCK /* otherwise it's lockf() */ 38 39/* if you don't have setsid(), you might have setpgrp(). */ 40#define HAVE_SETSID 41 42/* random() is generally considered better than rand() */ 43#define HAVE_RANDOM 44 45/* the srand48/lrand48/etc family is s'posedly even better */ 46#define HAVE_RAND48 47/* bmc@telebase and others have suggested these macros if a box *does* have 48 rand48. Will consider for later if we're doing something that really 49 requires stronger random numbers, but netcat and such certainly doesn't. 50#define srandom(seed) srand48((long) seed) 51#define random() lrand48() */ 52 53/* if your machine doesn't have lstat(), it should have stat() [dos...] */ 54#define HAVE_LSTAT 55 56/* different kinds of term ioctls. How to recognize them, very roughly: 57 sysv/POSIX_ME_HARDER: termio[s].h, struct termio[s], tty.c_*[] 58 bsd/old stuff: sgtty.h, ioctl(TIOCSETP), sgttyb.sg_*, tchars.t_* */ 59#define HAVE_TERMIOS 60 61/* dbm vs ndbm */ 62#define HAVE_NDBM 63 64/* extended utmp/wtmp stuff. MOST machines still do NOT have this SV-ism */ 65#define UTMPX 66 67/* some systems have nice() which takes *relative* values... [resource.h] */ 68#define HAVE_SETPRIORITY 69 70/* a sysvism, I think, but ... */ 71#define HAVE_SYSINFO 72 73/* ============= */ 74/* Include files */ 75/* ============= */ 76 77/* Presence of these can be determined via a script that sniffs them 78 out if you aren't sure. See "stupidh"... */ 79 80/* stdlib comes with most modern compilers, but ya never know */ 81#define HAVE_STDLIB_H 82 83/* not on a DOS box! */ 84#define HAVE_UNISTD_H 85 86/* stdarg is a weird one */ 87#define HAVE_STDARG_H 88 89/* dir.h or maybe ndir.h otherwise. */ 90#define HAVE_DIRENT_H 91 92/* string or strings */ 93#define HAVE_STRINGS_H 94 95/* if you don't have lastlog.h, what you want might be in login.h */ 96#define HAVE_LASTLOG_H 97 98/* predefines for _PATH_various */ 99#define HAVE_PATHS_H 100 101/* some SV-flavors break select stuff out separately */ 102#define HAVE_SELECT_H 103 104/* assorted others */ 105#define HAVE_PARAM_H /* in sys/ */ 106#define HAVE_SYSMACROS_H /* in sys/ */ 107#define HAVE_TTYENT_H /* securetty et al */ 108 109/* ==================== */ 110 111/* Still maybe have to do something about the following, if it's even 112 worth it. I just grepped a lot of these out of various code, without 113 looking them up yet: 114 115#define HAVE_EINPROGRESS 116#define HAVE_F_SETOWN 117HAVE_FILIO_H ... fionbio, fiosetown, etc... will need for hairier 118 select loops. 119#define HAVE_SETENV ... now *there's* a hairy one; **environ is portable 120#define BIG_ENDIAN/little_endian ... *please* try to avoid this stupidity 121 and LSBFIRST/MSBFIRST 122#define HAVE_GETUSERSHELL ... you could always pull it out of getpwent() 123#define HAVE_SETE[UG]ID ... lib or syscall, it varies on diff platforms 124#define HAVE_STRCHR ... should actually be handled by string/strings 125#define HAVE_PSTAT 126#define HAVE_ST_BLKSIZE ... a stat() thing? 127#define HAVE_IP_TOS 128#define HAVE_STRFTIME ... screw this, we'll just INCLUDE one for lame 129 old boxes that don't have it [sunos 3.x, early 4.x?] 130#define HAVE_VFPRINTF 131#define HAVE_SHADOW_PASSWD ... in its multitudinous schemes?? ... how 132 about sumpin' like #define SHADOW_PASSWD_TYPE ... could get grody. 133 ... looks like sysv /etc/shadow, getspent() family is common. 134#define SIG* ... what a swamp, punt for now; should all be in signal.h 135#define HAVE_STRCSPN ... see larry wall's comment in the fwtk regex code 136#define ULTRIX_AUTH ... bwahaha. 137#define HAVE_YP or NIS or whatever you wanna call it this week 138randomness about VARARGS?? 139--- later stuff to be considered --- 140#define UINT4 ... u-int on alpha/osf, i.e. __alpha/__osf__, ulong elsewhere? 141 dont name it that, though, it'll conflict with extant .h files like md5 142randomness about machine/endian.h, machine/inline.h -- bsdi, net/2 143randomness about _PATH_WTMP vs WTMP_FILE and where they even live!! 144#define HAVE_SYS_ERRLIST ... whether it's in stdio.h or not [bsd 4.4] 145--- still more stuff 146#define HAVE_SETENV 147#define _PATH_UTMP vs UTMP_FILE, a la deslogind?! 148#define HAVE_DAEMON 149#define HAVE_INETADDR [vixie bind?] 150lseek: SEEK_SET vs L_SET and associated lossage [epi-notes, old 386Mach] 151bsdi: ioctl_compat.h ? 152--- takin' some ifdefs from CNS krb: 153F_GETOWN/F_SETOWN 154CRAY: long = 8 bytes, etc [class with alpha?] 155CGETENT 156SIGINFO 157SIGTSTP SIGTTOU SIGWINCH 158SPX? 159SYSV_TERMIO -- covered elsewhere, I hope 160TIOCEXT TIOCFLUSH TIOC[GS]WINSIZ 161NEWINIT: something about init cleaning up dead login processes [telnet?] 162PARENT_DOES_UTMP, too [telnet] 163VDISCARD 164VEOL/VEOL2/VLNEXT VREPRINT -- termios stuff?, and related... 165STREAMSPTY/STREAMSPTYEM 166AF_INET/AF_UNSPEC, PF_* 167ECHOCTL/ECHOKE 168F_ULOCK [?!] 169setpgrp/getpgrp() ONEARG business.. 170HAVE_ALLOCA 171HAVE_GETUTENT 172HAVE_SYS_SELECT_H [irix!] 173HAVE_DIRENT [old 386mach has *direct.h*!] 174HAVE_SIGSET 175HAVE_VFORK_H and HAVE_VFORK 176HAVE_VHANGUP 177HAVE_VSPRINTF 178HAVE_IPTOS_* 179HAVE_STRCASECMP, STRNCASECMP 180HAVE_SYS_FCNTL_H 181HAVE_SYS_TIME_H 182HAVE_UTIMES 183NOTTYENT [?] 184HAVE_FCHMOD 185HAVE_GETUSERSHELL 186HAVE_SIGCONTEXT [stack hair, very machine-specific] 187YYLINENO? 188POSIX_SIGNALS 189POSIX_TERMIOS 190SETPROCTITLE -- breaks some places, like fbsd sendmail 191SIG* -- actual signal names? some are missing 192SIOCGIFCONF 193SO_BROADCAST 194SHMEM [krb tickets] 195VARARGS, or HAVE_VARARGS 196CBAUD 197... and B300, B9600, etc etc 198HAVE_BZERO vs memset/memcpy 199HAVE_SETVBUF 200HAVE_STRDUP 201HAVE_GETENV 202HAVE_STRSAVE 203HAVE_STBLKSIZE [stat?] 204HAVE_STREAM_H -- in sys/, ref sendmail 8.7 for IP_SRCROUTE 205FCHMOD 206INITGROUPS -- most machines seem to *have* 207SETREUID 208SNPRINTF 209SETPGRP semantics bsd vs. sys5 style 210 211There's also the issue about WHERE various .h files live, sys/ or otherwise. 212There's a BIG swamp lurking where network code of any sort lives. 213*/ 214 215/* ======================== */ 216/* System-specific sections */ 217/* ======================== */ 218 219/* By turning OFF various bits of the above, you can customize for 220 a given platform. Yes, we're ignoring the stock compiler predefines 221 and using our own plugged in via the Makefile. */ 222 223/* DOS boxes, with MSC; you may need to adapt to a different compiler. */ 224/* looks like later ones *do* have dirent.h, for example */ 225#ifdef MSDOS 226#undef HAVE_FLOCK 227#undef HAVE_RANDOM 228#undef HAVE_LSTAT 229#undef HAVE_TERMIOS 230#undef UTMPX 231#undef HAVE_SYSINFO 232#undef HAVE_UNISTD_H 233#undef HAVE_DIRENT_H /* unless you have the k00l little wrapper from L5!! */ 234#undef HAVE_STRINGS_H 235#undef HAVE_LASTLOG_H 236#undef HAVE_PATHS_H 237#undef HAVE_PARAM_H 238#undef HAVE_SYSMACROS_H 239#undef HAVE_SELECT_H 240#undef HAVE_TTYENT_H 241#endif /* MSDOS */ 242 243/* buglix 4.x; dunno about 3.x on down. should be bsd4.2 */ 244#ifdef ULTRIX 245#undef UTMPX 246#undef HAVE_PATHS_H 247#undef HAVE_SYSMACROS_H 248#undef HAVE_SELECT_H 249#endif /* buglix */ 250 251/* some of this might still be broken on older sunoses */ 252#ifdef SUNOS 253#undef VOID_MALLOC 254#undef UTMPX 255#undef HAVE_PATHS_H 256#undef HAVE_SELECT_H 257#endif /* sunos */ 258 259/* "contact your vendor for a fix" */ 260#ifdef SOLARIS 261/* has UTMPX */ 262#undef HAVE_RANDOM 263#undef HAVE_SETPRIORITY 264#undef HAVE_STRINGS_H /* this is genuinely the case, go figure */ 265#undef HAVE_PATHS_H 266#undef HAVE_SELECT_H 267#undef HAVE_TTYENT_H 268#endif /* SOLARIS */ 269 270/* whatever aix variant MIT had at the time; 3.2.x?? */ 271#ifdef AIX 272#undef UTMPX 273#undef HAVE_LASTLOG_H 274#define HAVE_LOGIN_H /* "special", in the educational sense */ 275#endif /* aix */ 276 277/* linux, which is trying as desperately as the gnu folks can to be 278 POSIXLY_CORRECT. I think I'm gonna hurl... */ 279#ifdef LINUX 280#undef UTMPX 281#undef HAVE_SYSINFO 282#undef HAVE_SELECT_H 283#undef HAVE_TTYENT_H 284#endif /* linux */ 285 286/* irix 5.x; may not be correct for earlier ones */ 287#ifdef IRIX 288/* wow, does irix really have everything?! */ 289#endif /* irix */ 290 291/* osf on alphas */ 292#ifdef OSF 293#undef UTMPX 294#undef HAVE_SELECT_H 295#endif /* osf */ 296 297/* they's some FUCKED UP paths in this one! */ 298#ifdef FREEBSD 299#undef UTMPX 300#undef HAVE_SYSINFO 301#undef HAVE_LASTLOG_H 302#undef HAVE_SYSMACROS_H 303#undef HAVE_SELECT_H /* actually a lie, but only for kernel */ 304#endif /* freebsd */ 305 306/* Originally from the sidewinder site, of all places, but subsequently 307 checked further under a more normal bsdi 2.0 */ 308#ifdef BSDI 309#undef UTMPX 310#undef HAVE_LASTLOG_H 311#undef HAVE_SYSMACROS_H 312/* and their malloc.h was in sys/ ?! */ 313#undef HAVE_SELECT_H 314#endif /* bsdi */ 315 316/* netbsd/44lite, jives with amiga-netbsd from cactus */ 317#ifdef NETBSD 318#undef UTMPX 319#undef HAVE_SYSINFO 320#undef HAVE_LASTLOG_H 321#undef HAVE_SELECT_H 322#endif /* netbsd */ 323 324/* Hpux 9.0x, from BBN and various patches sent in */ 325#ifdef HPUX 326#undef HAVE_RANDOM /* but *does* have ?rand48 -- need to consider.. */ 327#undef HAVE_UTMPX 328#undef HAVE_LASTLOG_H /* has utmp/wtmp/btmp nonsense, and pututline() */ 329#undef HAVE_PATHS_H 330#undef HAVE_SELECT_H 331#undef HAVE_TTYENT_H 332#endif /* hockeypux */ 333 334/* Unixware [a loose definition of "unix", to be sure], 1.1.2 [at least] 335 from Brian Clapper. He wasn't sure about 2.0... */ 336#ifdef UNIXWARE 337/* has UTMPX */ 338#undef HAVE_SETPRIORITY 339/* NOTE: UnixWare does provide the BSD stuff, in "/usr/ucbinclude" (headers) 340 and "/usr/ucblib" (libraries). However, I've run into problems linking 341 stuff out of that version of the C library, when objects are also coming 342 out of the "regular" C library. My advice: Avoid the BSD compatibility 343 stuff wherever possible. Brian Clapper <bmc@telebase.com> */ 344#undef HAVE_STRINGS_H 345#undef HAVE_PATHS_H 346#undef HAVE_TTYENT_H 347#endif /* UNIXWARE */ 348 349/* A/UX 3.1.x from darieb@sandia.gov */ 350#ifdef AUX 351#undef HAVE_RANDOM 352#undef HAVE_SELECT_H /* xxx: untested */ 353#endif /* a/ux */ 354 355/* NeXTSTEP 3.2 motorola mudge@l0pht.com xxx should also work with 356 white hardware and Sparc/HPPA. Should work with 3.3 too as it's 357 4.3 / 4.4 bsd wrapped around mach */ 358#ifdef NEXT 359#undef UTMPX 360#undef HAVE_SELECT_X 361#endif /* NeXTSTEP 3.2 motorola */ 362 363/* Make some "generic" assumptions if all else fails */ 364#ifdef GENERIC 365#undef HAVE_FLOCK 366#if defined(SYSV) && (SYSV < 4) /* TW leftover: old SV doesnt have symlinks */ 367#undef HAVE_LSTAT 368#endif /* old SYSV */ 369#undef HAVE_TERMIOS 370#undef UTMPX 371#undef HAVE_PATHS_H 372#undef HAVE_SELECT_H 373#endif /* generic */ 374 375/* ================ */ 376#endif /* GENERIC_H */ 377 378