summaryrefslogtreecommitdiff
path: root/stupidh
diff options
context:
space:
mode:
Diffstat (limited to 'stupidh')
-rwxr-xr-xstupidh464
1 files changed, 464 insertions, 0 deletions
diff --git a/stupidh b/stupidh
new file mode 100755
index 0000000..9214102
--- /dev/null
+++ b/stupidh
@@ -0,0 +1,464 @@
+#! /bin/sh
+##
+## Find stupid system include dependencies and account for them. Squirts
+## a sample .h file to stdout containing [too many of] the right things.
+## If you hose the output into "stupid.h", you will get MORE information.
+## This takes a while to run, because it checks so many things.
+##
+## IF YOU HAVE a system/arch/compiler/whatever that is NOT one of:
+## msdos-msc6.x ultrix-vax ultrix-mips sunos4.1.x-sparc solaris2.x-sparc
+## aix-rs6k linux1.[01].x-x86 freebsd-x86 netbsd-x86 hpux
+## [... hopefully this list will grow very large]
+## or even if you aren't sure, you would be doing me and the net in general
+## a wonderful service by running this and MAILING me the "full" output, e.g.
+##
+## chmod +x stupidh
+## ./stupidh > stupid.h
+## mail hobbit@avian.org < stupid.h
+##
+## WARNING: You may have to change "cc" to "gcc" below if you don't have
+## "cc" [e.g. solaris, thank you very fucking much, Sun].
+## Please note any errors this generates, too...
+##
+## *Hobbit*, 941122 and previous. VERSION: 1.3 951107
+##
+## edits: Use a consistent naming scheme, for easier identification and cleanup.
+## accomodate gcc's BOGUS assumptions based on input filename.
+## added a few more include-names and try-predefines; some swiped from autoconf.
+## added a couple of things commonly done as #defines so we can SEE 'em
+
+## Here is where to change "cc" to "gcc" if needed:
+CC=cc
+
+if test -z "${INCLUDE}" ; then
+ INCLUDE=/usr/include
+fi
+
+echo '/* STUPIDH run:'
+uname -a
+echo '*/'
+echo ''
+
+echo "/* Includes, from ${INCLUDE} */"
+for xx in \
+assert ctype cdefs errno file fcntl ioctl malloc stdio stdlib stdarg iostdio \
+stddef dirent direct dir ndir utmp wtmp utmpx wtmpx lastlog login paths \
+getopt string strings signal setjmp io param stat types time timeb utime \
+dos msdos unistd socket netdb varargs sysinfo systeminfo resource ulimit \
+stream stropts pstat sysmacros termio termios sgtty tty ttyent lstat select \
+sockio wait vfork bsdtypes mkdev utsname sysexits \
+; do
+
+ XX=''
+ if test -f ${INCLUDE}/${xx}.h ; then
+ echo "#include <${xx}.h>"
+ XX=`echo $xx | tr '[a-z]' '[A-Z]'`
+ fi
+ if test -f ${INCLUDE}/sys/${xx}.h ; then
+ echo "#include <sys/${xx}.h>"
+ XX=`echo $xx | tr '[a-z]' '[A-Z]'`
+ fi
+
+# everyone seems to have their own conventions; this may not be complete.
+# thats why this is so STUPID.
+# HAS_xx and USE_xx might indicate functions and available library calls,
+# not includes. Deal...
+
+ if test "${XX}" ; then
+ echo "#define USE_${XX}_H"
+ echo "#define HAS_${XX}_H"
+ echo "#define HAS_${XX}"
+ echo "#define HAS${XX}"
+ echo "#define HAVE_${XX}_H"
+ echo "#define HAVE_${XX}"
+ echo "#define HAVE${XX}H"
+ echo "#define ${XX}H"
+ echo ''
+ fi
+# Stupid hack: "dir" and "dirent" might mutually exclusive, a la GNU
+# includes. This is to prevent it from biting us.
+ if test "${xx}" = "dirent" ; then
+ echo "#ifdef _SYS_DIRENT_H"
+ echo "#undef _SYS_DIRENT_H"
+ echo "#endif"
+ fi
+
+### To make a DOS batchfile instead, do this [on a unix box!], xfer results,
+### and have "xxx.bat" that types out all the cruft for %INCLUDE%\%1.
+### WARNING: I might not have gotten the superquoting exactly right here...
+# echo "if exist %INCLUDE%\\${xx}.h call xxx ${xx}"
+# echo "if exist %INCLUDE%\\sys\\${xx}.h call xxx sys/${xx}"
+### You also need to save and manually run the CPP input file, below.
+### I've done this for msc6 and would appreciate results for other compilers.
+
+done
+sync
+sleep 1
+
+### Note: if all the previous output went to "stupid.h", it will be
+### reincluded in the second part of this.
+
+sed -e '/^#/d' -e '/^[ ]*$/d' > st00pid.in << 'EOF'
+
+### More recently, some of this was swiped from the "gcc" doc. Autoconf is
+### worth a harder look for more ideas; havent gotten around to it yet.
+# architectures
+alpha
+dec
+ibm
+i370
+i960
+i860
+ibm032
+a29k
+indigo
+iris
+mips
+mipsel
+sparc
+sparclite
+ncr
+sh
+harris
+apple
+vax
+x86
+ix86
+i286
+i386
+i486
+i586
+pentium
+intel
+smp
+mpu
+mpu8080
+mpu8086
+amiga
+hp
+hppa
+hp400
+hp9000
+snake
+decmips
+mc68000
+mc68010
+mc68020
+mc68030
+m68000
+m68010
+m68020
+m68030
+m68k
+m88k
+u3b15
+u3b
+u3b2
+u3b5
+u3b15
+u3b20d
+we32k
+ppc
+powerpc
+arm
+aviion
+ns32000
+iapx286
+# minor exception to lc-vs-uc thing?
+iAPX286
+rs6000
+rs6k
+risc
+sun
+sun3
+sun4
+sun4c
+sun4m
+sequent
+apollo
+solbourne
+pyr
+pyramid
+interdata
+intertec
+pdp11
+u370
+next
+mac
+macintosh
+
+# for completeness; ya never know ... yes, found it!! -- solaris inet/common.h
+big_endian
+little_endian
+lsbfirst
+msbfirst
+
+# vendors/OSes
+unix
+munix
+m_unix
+gcos
+os
+gssc
+tss
+isc
+# *This* pair of imbeciles does *caseified defines*. Pinheads. One of
+# these might trigger before the "tr" step.
+NetBSD
+netbsd
+freebsd
+FreeBSD
+# cant do 386bsd, I dont think, but ...
+_386bsd
+bsd386
+bsdunix
+bsd_2
+bsd_20
+bsd
+bsdi
+bsd4
+bsd42
+bsd43
+bsd44
+bsd4_2
+bsd4_3
+bsd4_4
+linux
+minix
+ultrix
+ult3
+ult4
+bull
+convex
+convex_source
+res
+rt
+esix
+dg
+dgux
+encore
+osf
+osf1
+osf2
+# oops:
+# osf/1
+mach
+mach386
+mach_386
+nextstep
+tahoe
+reno
+sunos
+sunos3
+sunos4
+sunos5
+solaris
+sun_src_compat
+svr3
+svr4
+svr3_style
+svr4_style
+sysv
+hpux
+hp_ux
+irix
+sgi
+sony
+news
+newsos
+news_os
+luna
+lynxos
+riscos
+microport
+ewsux
+ews_ux
+mport
+dynix
+genix
+unicos
+unixware
+msdos
+dos
+os2
+novell
+univel
+plan9
+att
+att_unix
+sco
+odt
+aix
+aux
+a_ux
+rsx
+vms
+
+# compiler cruft??
+ansi
+ansi_source
+ansic
+stdc
+lint
+sccs
+libc_sccs
+ms
+msc
+microsoft
+gcc
+gnu
+gnuc
+gnucc
+gnu_source
+sabre
+saber
+cygnus
+source
+all_source
+gprof
+prof
+posix
+posix_source
+posix_sources
+posix_c_source
+xopen_source
+args
+p
+proto
+no_proto
+prototype
+prototypes
+reentrant
+kernel
+str
+trace
+asm
+libcpp
+athena
+athena_compat
+# some preprocessors cant deal with this
+# c++
+cxx
+cplusplus
+borland
+turbo
+turboc
+lattice
+highc
+
+# various defines that pop out of other .h files that we need to know about
+index
+strchr
+rindex
+strrchr
+bcopy
+memcpy
+bzero
+memset
+path_login
+path_lastlog
+path_utmp
+path_utmpx
+
+EOF
+
+# FL must be named something.c, so STUPID gcc recognized it as a non-object!!
+( FL=st00pid.c
+ if test -f stupid.h ; then
+ cp stupid.h $FL
+ sync
+ echo '/* Re-including stupid.h */'
+ sleep 1
+ else
+ echo '/* Skipping stupid.h */'
+ fi
+ while read xx ; do
+ XX=`echo $xx | tr '[a-z]' '[A-Z]'`
+ echo "#ifdef ${xx}" >> $FL
+ echo "\"${xx}\" = ${xx}" >> $FL
+ echo "#endif" >> $FL
+ echo "#ifdef _${xx}" >> $FL
+ echo "\"_${xx}\" = _${xx}" >> $FL
+ echo "#endif" >> $FL
+ echo "#ifdef _${xx}_" >> $FL
+ echo "\"_${xx}_\" = _${xx}_" >> $FL
+ echo "#endif" >> $FL
+ echo "#ifdef __${xx}" >> $FL
+ echo "\"__${xx}\" = __${xx}" >> $FL
+ echo "#endif" >> $FL
+ echo "#ifdef __${xx}__" >> $FL
+ echo "\"__${xx}__\" = __${xx}__" >> $FL
+ echo "#endif" >> $FL
+ echo "#ifdef ${XX}" >> $FL
+ echo "\"${XX}\" = ${XX}" >> $FL
+ echo "#endif" >> $FL
+ echo "#ifdef _${XX}" >> $FL
+ echo "\"_${XX}\" = _${XX}" >> $FL
+ echo "#endif" >> $FL
+ echo "#ifdef _${XX}_" >> $FL
+ echo "\"_${XX}_\" = _${XX}_" >> $FL
+ echo "#endif" >> $FL
+ echo "#ifdef __${XX}" >> $FL
+ echo "\"__${XX}\" = __${XX}" >> $FL
+ echo "#endif" >> $FL
+ echo "#ifdef __${XX}__" >> $FL
+ echo "\"__${XX}__\" = __${XX}__" >> $FL
+ echo "#endif" >> $FL
+ done
+# and pick up a few specials
+ echo "#ifdef major" >> $FL
+ echo "\"major\" = major (x)" >> $FL
+ echo "\"minor\" = minor (x)" >> $FL
+ echo "#endif" >> $FL
+ echo "#ifdef FD_SETSIZE" >> $FL
+ echo "\"FD_SETSIZE\" = FD_SETSIZE" >> $FL
+ echo "#endif" >> $FL
+) < st00pid.in
+sync
+
+echo '/* Compiler predefines:'
+${CC} -E st00pid.c | sed -e '/^#/d' -e '/^[ ]*$/d'
+echo '*/'
+sync
+
+cat > st00pid.c << 'EOF'
+#include <stdio.h>
+main() {
+union {
+ char *bletch;
+ int *i;
+} yow;
+static char orig[16];
+ strcpy (orig, "ABCDEFGHIJK");
+ yow.bletch = orig;
+ printf ("endian thing: %s = 0x%lx, addrbyte = %x -- ",
+ yow.bletch, *yow.i, *yow.i & 0xFF);
+ printf (((*yow.i & 0xff) == 0x41) ? "LITTLE\n" : "BIG\n");
+ printf ("short %d; int %d; long %d\n",
+ sizeof (short), sizeof (int), sizeof (long));
+}
+EOF
+
+${CC} -o st00pid.x st00pid.c
+echo '/* Architecture:'
+./st00pid.x
+echo '*/'
+
+### dont nuke if generating DOS batchfiles
+rm -f st00pid.*
+sync
+exit 0
+
+### stuff remaining to deal with:
+# maybe take out the slew of HAS_* and HAS* excess predefines, and only use
+# our "standardized" scheme [like we were going to generate a real includible
+# file outa this??]
+# various POSIX_ME_HARDERisms:
+# vfork
+# lockf/flock/fcntl/euuugh
+# signal stuff
+# termio/termios/sgtty hair
+# strdup and related
+# ifdef HAVE_STD_LIB and such nonsense
+# auto-sniff cc-vs-gcc somehow? maybe a straight OR with exit statii..
+