summaryrefslogtreecommitdiffstats
path: root/usr.bin/sgmls/configure
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin/sgmls/configure')
-rwxr-xr-xusr.bin/sgmls/configure617
1 files changed, 617 insertions, 0 deletions
diff --git a/usr.bin/sgmls/configure b/usr.bin/sgmls/configure
new file mode 100755
index 0000000..7fd1968
--- /dev/null
+++ b/usr.bin/sgmls/configure
@@ -0,0 +1,617 @@
+#!/bin/sh
+# Generate config.h from unix.cfg.
+
+trap 'rm -f doit doit.c doit.o doit.log config.out; exit 1' 1 2 3 15
+
+on=
+off=
+CC=${CC-cc}
+
+# Normally we use VARARGS if __STDC__ is not defined.
+# Test whether this assumption is wrong.
+
+cat >doit.c <<\EOF
+#ifdef __STDC__
+#include <stdarg.h>
+int foo(char *s,...)
+{
+ va_list ap;
+
+ va_start(ap, s);
+ va_end(ap);
+ return 0;
+}
+#else
+int foo = 0;
+#endif
+EOF
+
+$CC $CFLAGS -c doit.c >/dev/null 2>&1
+if test $? -ne 0
+then
+ on="$on VARARGS"
+fi
+
+cat >doit.c <<\EOF
+#include <stddef.h>
+int foo = 0;
+EOF
+
+if $CC $CFLAGS -c doit.c >/dev/null 2>&1
+then
+ off="$off STDDEF_H_MISSING"
+else
+ on="$on STDDEF_H_MISSING"
+fi
+
+cat >doit.c <<\EOF
+#include <stdlib.h>
+int foo = 0;
+EOF
+
+if $CC $CFLAGS -c doit.c >/dev/null 2>&1
+then
+ off="$off STDLIB_H_MISSING"
+else
+ on="$on STDLIB_H_MISSING"
+fi
+
+cat >doit.c <<\EOF
+#include <limits.h>
+int foo = 0;
+EOF
+
+if $CC $CFLAGS -c doit.c >/dev/null 2>&1
+then
+ off="$off LIMITS_H_MISSING"
+else
+ on="$on LIMITS_H_MISSING"
+fi
+
+cat >doit.c <<\EOF
+#include <vfork.h>
+int foo = 0;
+EOF
+
+if $CC $CFLAGS -c doit.c >/dev/null 2>&1
+then
+ on="$on HAVE_VFORK_H"
+else
+ off="$off HAVE_VFORK_H"
+fi
+
+cat >doit.c <<\EOF
+#include <unistd.h>
+int foo = 0;
+EOF
+
+if $CC $CFLAGS -c doit.c >/dev/null 2>&1
+then
+ on="$on HAVE_UNISTD_H"
+else
+ off="$off HAVE_UNISTD_H"
+fi
+
+cat >doit.c <<\EOF
+#include <sys/types.h>
+#include <sys/stat.h>
+int foo = 0;
+EOF
+
+if $CC $CFLAGS -c doit.c >/dev/null 2>&1
+then
+ on="$on HAVE_SYS_STAT_H"
+else
+ off="$off HAVE_SYS_STAT_H"
+fi
+
+cat >doit.c <<\EOF
+/* Exit normally unless we need to use isascii. */
+
+#include <ctype.h>
+#include <signal.h>
+
+static int whoops()
+{
+ _exit(1);
+}
+
+main()
+{
+ int c;
+#ifdef isascii
+#ifdef SIGSEGV
+ signal(SIGSEGV, whoops);
+#endif
+#ifdef SIGBUS
+ signal(SIGBUS, whoops);
+#endif
+#ifdef SIGIOT
+ signal(SIGIOT, whoops);
+#endif
+
+ for (c = 128; c < 256; c++) {
+ if (c == '0' || c == '1' || c == '2' || c == '3' || c == '4' || c == '5'
+ || c == '6' || c == '7' || c == '8' || c == '9') {
+ if (!isdigit(c) || isalpha(c) || iscntrl(c) || isspace(c) || ispunct(c))
+ exit(1);
+ }
+ else if (isdigit(c))
+ exit(1);
+ else if (isalpha(c)) {
+ if (iscntrl(c) || isspace(c) || ispunct(c)
+ || (islower(c) && toupper(c) != c && !isupper(toupper(c)))
+ || (isupper(c) && tolower(c) != c && !islower(tolower(c))))
+ exit(1);
+ }
+ else if (islower(c) || isupper(c))
+ exit(1);
+ else if (iscntrl(c)) {
+ if (ispunct(c))
+ exit(1);
+ }
+ }
+#endif /* isascii */
+ exit(0);
+}
+EOF
+
+if $CC $CFLAGS -o doit doit.c $LIBS >/dev/null 2>&1 && ./doit 2>/dev/null
+then
+ # This tries to find the symbol that looks like the array
+ # used by <ctype.h>, and sees if its length appears to be 128
+ # rather than 256.
+ if test 1 = `(nm -n doit 2>/dev/null) | awk '
+BEGIN {
+ weight["0"] = 0;
+ weight["1"] = 1;
+ weight["2"] = 2;
+ weight["3"] = 3;
+ weight["4"] = 4;
+ weight["5"] = 5;
+ weight["6"] = 6;
+ weight["7"] = 7;
+ weight["8"] = 8;
+ weight["9"] = 9;
+ weight["a"] = weight["A"] = 10;
+ weight["b"] = weight["B"] = 11;
+ weight["c"] = weight["C"] = 12;
+ weight["d"] = weight["D"] = 13;
+ weight["e"] = weight["E"] = 14;
+ weight["f"] = weight["F"] = 15;
+}
+
+/^[0-9a-zA-Z]* D .*ctype/ && ctype_nr == 0 {
+ ctype_nr = NR;
+ addr = 0;
+ len = length($1);
+ for (i = 1; i <= len; i++)
+ addr = addr*16 + weight[substr($1, i, 1)];
+}
+
+/^[0-9a-zA-Z]* D / && NR == ctype_nr + 1 {
+ next_addr = 0;
+ len = length($1);
+ for (i = 1; i <= len; i++)
+ next_addr = next_addr*16 + weight[substr($1, i, 1)];
+}
+
+END {
+ size = next_addr - addr;
+ if (size >= 128 && size < 256)
+ print "1";
+ else
+ print "0";
+}'`
+ then
+ on="$on USE_ISASCII"
+ else
+ if ((yes | man 3 ctype) 2>/dev/null) \
+ | sed -e 's/.//g' -e 's/ *$//' -e '/de-$/N' \
+ -e 's/-\n//g' -e '/defined$/N' -e '/only$/N' \
+ -e '/where$/N' -e '/isascii$/N' -e '/is$/N' \
+ -e 's/\n/ /g' -e 's/ */ /g' \
+ | grep "defined only where isascii is true" >/dev/null
+ then
+ on="$on USE_ISASCII"
+ else
+ off="$off USE_ISASCII"
+ fi
+ fi
+else
+ on="$on USE_ISASCII"
+fi
+
+cat >doit.c <<\EOF
+main(argc, argv)
+int argc;
+char **argv;
+{
+ if (argc == 0)
+ remove("foo");
+ exit(0);
+}
+EOF
+
+if $CC $CFLAGS -o doit doit.c $LIBS >/dev/null 2>&1 && ./doit 2>/dev/null
+then
+ off="$off REMOVE_MISSING"
+else
+ on="$on REMOVE_MISSING"
+fi
+
+cat >doit.c <<\EOF
+main(argc, argv)
+int argc;
+char **argv;
+{
+ if (argc == 0)
+ getopt(argc, argv, "v");
+ exit(0);
+}
+EOF
+
+if $CC $CFLAGS -o doit doit.c $LIBS >/dev/null 2>&1 && ./doit 2>/dev/null
+then
+ on="$on HAVE_GETOPT"
+else
+ off="$off HAVE_GETOPT"
+fi
+
+cat >doit.c <<\EOF
+main(argc, argv)
+int argc;
+char **argv;
+{
+ if (argc == 0)
+ access("foo", 4);
+ exit(0);
+}
+EOF
+
+if $CC $CFLAGS -o doit doit.c $LIBS >/dev/null 2>&1 && ./doit 2>/dev/null
+then
+ on="$on HAVE_ACCESS"
+else
+ off="$off HAVE_ACCESS"
+fi
+
+cat >doit.c <<\EOF
+main(argc, argv)
+int argc;
+char **argv;
+{
+ if (argc == 0)
+ vfork();
+ exit(0);
+}
+EOF
+
+if $CC $CFLAGS -o doit doit.c $LIBS >/dev/null 2>&1 && ./doit 2>/dev/null
+then
+ on="$on HAVE_VFORK"
+else
+ off="$off HAVE_VFORK"
+fi
+
+cat >doit.c <<\EOF
+main(argc, argv)
+int argc;
+char **argv;
+{
+
+ if (argc == 0) {
+ int status;
+ waitpid(-1, &status, 0);
+ }
+ exit(0);
+}
+EOF
+
+if $CC $CFLAGS -o doit doit.c $LIBS >/dev/null 2>&1 && ./doit 2>/dev/null
+then
+ on="$on HAVE_WAITPID"
+else
+ off="$off HAVE_WAITPID"
+fi
+
+cat >doit.c <<\EOF
+#include <string.h>
+main(argc, argv)
+int argc;
+char **argv;
+{
+ if (argc == 0)
+ strerror(0);
+ exit(0);
+}
+EOF
+
+if $CC $CFLAGS -o doit doit.c $LIBS >/dev/null 2>&1 && ./doit 2>/dev/null
+then
+ off="$off STRERROR_MISSING"
+else
+ on="$on STRERROR_MISSING"
+fi
+
+cat >doit.c <<\EOF
+#include <strings.h>
+main(argc, argv)
+int argc;
+char **argv;
+{
+ if (argc == 0)
+ bcopy((char *)0, (char *)0, 0);
+ exit(0);
+}
+EOF
+
+if $CC $CFLAGS -o doit doit.c $LIBS >/dev/null 2>&1 && ./doit 2>/dev/null
+then
+ # Only use BSD_STRINGS if ANSI string functions don't work.
+ cat >doit.c <<\EOF
+#include <string.h>
+main(argc, argv)
+int argc;
+char **argv;
+{
+ if (argc == 0)
+ memcpy((char *)0, (char *)0, 0);
+ exit(0);
+}
+EOF
+
+ if $CC $CFLAGS -o doit doit.c $LIBS >/dev/null 2>&1 && ./doit 2>/dev/null
+ then
+ off="$off BSD_STRINGS"
+ else
+ on="$on BSD_STRINGS"
+ fi
+else
+ off="$off BSD_STRINGS"
+fi
+
+cat >doit.c <<\EOF
+#include <signal.h>
+main(argc, argv)
+int argc;
+char **argv;
+{
+ if (argc == 0)
+ raise(SIGINT);
+ exit(0);
+}
+EOF
+
+if $CC $CFLAGS -o doit doit.c $LIBS >/dev/null 2>&1 && ./doit 2>/dev/null
+then
+ off="$off RAISE_MISSING"
+else
+ on="$on RAISE_MISSING"
+fi
+
+cat >doit.c <<\EOF
+#include <stdio.h>
+main(argc, argv)
+int argc;
+char **argv;
+{
+ if (argc == 0) {
+ fpos_t pos;
+ fsetpos(stdin, &pos);
+ fgetpos(stdin, &pos);
+ }
+ exit(0);
+}
+EOF
+
+if $CC $CFLAGS -o doit doit.c $LIBS >/dev/null 2>&1 && ./doit 2>/dev/null
+then
+ off="$off FPOS_MISSING"
+else
+ on="$on FPOS_MISSING"
+fi
+
+cat >doit.c <<\EOF
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+
+main(argc, argv)
+int argc;
+char **argv;
+{
+ if (argc == 0) {
+ pid_t pid;
+ int status;
+ long n = sysconf(_SC_OPEN_MAX);
+ pid = waitpid(-1, &status, 0);
+ WIFSTOPPED(status);
+ WIFSIGNALED(status);
+ WIFEXITED(status);
+ WEXITSTATUS(status);
+ WTERMSIG(status);
+ WSTOPSIG(status);
+ }
+ exit(0);
+}
+EOF
+
+if $CC $CFLAGS -o doit doit.c $LIBS >/dev/null 2>&1 && ./doit 2>/dev/null
+then
+ on="$on POSIX"
+else
+ off="$off POSIX"
+fi
+
+cat >doit.c <<\EOF
+#include <stdio.h>
+#include <signal.h>
+
+static int whoops()
+{
+ _exit(1);
+}
+
+main()
+{
+ char buf[30];
+#ifdef SIGSEGV
+ signal(SIGSEGV, whoops);
+#endif
+#ifdef SIGBUS
+ signal(SIGBUS, whoops);
+#endif
+#ifdef SIGIOT
+ signal(SIGIOT, whoops);
+#endif
+ sprintf(buf, "%2$s%2$s%1$s%1$s", "bar", "foo");
+ exit(!!strcmp(buf, "foofoobarbar"));
+}
+EOF
+
+if $CC $CFLAGS -o doit doit.c $LIBS >/dev/null 2>&1 && ./doit 2>/dev/null
+then
+ on="$on HAVE_EXTENDED_PRINTF"
+else
+ off="$off HAVE_EXTENDED_PRINTF"
+fi
+
+cat >doit.c <<\EOF
+#include <nl_types.h>
+
+main(argc, argv)
+int argc;
+char **argv;
+{
+ if (argc == 0) {
+ nl_catd d = catopen("foo", 0);
+ catgets(d, 1, 1, "default");
+ catclose(d);
+ }
+ exit(0);
+}
+EOF
+
+if $CC $CFLAGS -o doit doit.c $LIBS >/dev/null 2>&1 && ./doit 2>/dev/null
+then
+ on="$on HAVE_CAT"
+else
+ off="$off HAVE_CAT"
+fi
+
+cat >doit.c <<\EOF
+#include <limits.h>
+
+char c = UCHAR_MAX;
+
+main(argc, argv)
+int argc;
+char **argv;
+{
+#if CHAR_MIN < 0
+ exit(!(c < 0));
+#else
+ exit(!(c > 0));
+#endif
+}
+EOF
+
+if $CC $CFLAGS -o doit doit.c $LIBS >/dev/null 2>&1 && ./doit 2>/dev/null
+then
+ char_signed=
+else
+ cat >doit.c <<\EOF
+main()
+{
+ int i;
+
+ for (i = 0; i < 512; i++) {
+ char c = (char)i;
+ if (c < 0)
+ exit(1);
+ }
+ exit(0);
+}
+EOF
+
+ if $CC $CFLAGS -o doit doit.c $LIBS >/dev/null 2>&1 && ./doit 2>/dev/null
+ then
+ char_signed=0
+ else
+ char_signed=1
+ fi
+fi
+
+cat >doit.c <<\EOF
+
+typedef void VOID;
+
+extern VOID bar();
+
+VOID foo()
+{
+}
+EOF
+
+if $CC $CFLAGS -c doit.c >/dev/null 2>&1
+then
+ void_ret=void
+else
+ void_ret=int
+fi
+
+
+cat >doit.c <<\EOF
+
+void *foo()
+{
+ static char *buf;
+ return buf;
+}
+EOF
+
+if $CC $CFLAGS -c doit.c >doit.log 2>&1
+then
+ if test -s doit.log
+ then
+ void_star="char \*"
+ else
+ void_star="void \*"
+ fi
+
+else
+ void_star="char \*"
+fi
+
+edit=
+
+rm -f doit.c doit doit.log doit.o
+
+for var in $on
+do
+ edit="$edit -e 's;^/\\* *\\(#define $var [^/]*\\) *\\*/;\\1;'"
+done
+for var in $off
+do
+ edit="$edit -e 's;^#define $var [^/]*;/* & */;'"
+done
+
+if test -n "$char_signed"
+then
+ edit="$edit -e 's;^/\\* *\\(#define CHAR_SIGNED $char_signed\\) *\\*/;\\1;'"
+fi
+
+edit="$edit -e 's/^typedef .*VOID;/typedef $void_ret VOID;/'"
+edit="$edit -e 's/^typedef .*UNIV;/typedef ${void_star}UNIV;/'"
+
+if test "X$(PREFIX)" != "X/usr/local"
+then
+ edit="$edit -e '/DEFAULT_PATH/s;/usr/local;$PREFIX;g'"
+fi
+
+eval sed $edit unix.cfg ">config.out"
+
+mv config.out config.h
+
+exit 0
OpenPOWER on IntegriCloud