summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorKai Germaschewski <kai@tp1.ruhr-uni-bochum.de>2002-08-16 07:32:28 -0500
committerKai Germaschewski <kai@tp1.ruhr-uni-bochum.de>2002-08-16 07:32:28 -0500
commit871f6b393a11aec656a8a514c440b22d51d56eb5 (patch)
treee256b36eca104016222b01c9807b561a4c56e9ff /scripts
parent75db34bc1ca7e549deb52283147a11de9c1b5d9f (diff)
parentedc947d207b5400800aac633e7074e7379d7dff3 (diff)
kbuild: Hand merge
Diffstat (limited to 'scripts')
-rw-r--r--scripts/Makefile67
-rw-r--r--scripts/conmakehash.c293
-rw-r--r--scripts/lxdialog/Makefile4
3 files changed, 331 insertions, 33 deletions
diff --git a/scripts/Makefile b/scripts/Makefile
index 0416b0f86137..054afe4ef069 100644
--- a/scripts/Makefile
+++ b/scripts/Makefile
@@ -1,8 +1,15 @@
-
-# always needed
+###
+# scripts contains sources for various helper programs used throughout
+# the kernel for the build process.
# ---------------------------------------------------------------------------
+# fix-dep: Used to generate dependency information during build process
+# split-include: Divide all config symbols up in a number of files in
+# include/config/...
+# docproc: Preprocess .tmpl file in order to generate .sgml documentation
+# conmakehash: Create arrays for initializing the kernel console tables
+# tkparse: Used by xconfig
-all: fixdep split-include docproc __chmod
+all: fixdep split-include docproc conmakehash __chmod
# The following temporary rule will make sure that people's
# trees get updated to the right permissions, since patch(1)
@@ -14,47 +21,45 @@ all: fixdep split-include docproc __chmod
__chmod: kernel-doc mkcompile_h makelst
@chmod a+x $^
-# xconfig
-# ---------------------------------------------------------------------------
+host-progs := fixdep split-include conmakehash docproc tkparse
+tkparse-objs := tkparse.o tkcond.o tkgen.o
-HEADER=header.tk
-TAIL=tail.tk
-# Previous versions always remade kconfig.tk because they always depended
-# on soundscript. This runs fairly fast, and I can't find all the
-# Config.in files to depend on anyways. So I'll force it to remake.
+include $(TOPDIR)/Rules.make
-kconfig.tk: $(TOPDIR)/arch/$(ARCH)/config.in tkparse $(HEADER) $(TAIL) FORCE
+# In reality kconfig.tk should depend on all Config.in files,
+# but it is not worth the effort to generate the dependencies.
+# The alternative solution to always generate it is fairly fast.
+# FORCE it to remake
+$(obj)/kconfig.tk: $(srctree)/arch/$(ARCH)/config.in tkparse FORCE
@echo ' Generating $@'
@( \
- if [ -f /usr/local/bin/wish ]; then \
+ if [ -f /usr/local/bin/wish ]; then \
echo '#!'"/usr/local/bin/wish -f"; \
- else \
+ else \
echo '#!'"/usr/bin/wish -f"; \
- fi; \
- cat $(HEADER); \
- ./tkparse < $<; \
- echo "set defaults \"arch/${ARCH}/defconfig\""; \
- echo "set ARCH \"${ARCH}\""; \
- cat $(TAIL) \
+ fi; \
+ cat $(src)/header.tk; \
+ $(obj)/tkparse < $<; \
+ echo "set defaults \"arch/${ARCH}/defconfig\""; \
+ echo "set ARCH \"${ARCH}\""; \
+ cat $(src)/tail.tk; \
) > $@
- chmod 755 $@
+ @chmod 755 $@
-# ---------------------------------------------------------------------------
+# ---------------------------------------------------------------------------
+# Targets hardcoded and wellknow in top-level makefile
.PHONY: lxdialog
-
lxdialog:
$(MAKE) -C lxdialog all
-# ---------------------------------------------------------------------------
-
-host-progs := fixdep split-include docproc tkparse
-
-tkparse-objs := tkparse.o tkcond.o tkgen.o
-
# fixdep is needed to compile other host programs
+$(obj)/split-include $(obj)/docproc $(addprefix $(obj)/,$(tkparse-objs)) \
+$(obj)/conmakehash lxdialog: $(obj)/fixdep
-split-include docproc $(tkparse-objs) lxdialog: fixdep
-
+mrproper:
+ @echo 'Making mrproper (scripts)'
+ @rm -f $(tkparse-objs) $(obj)/kconfig.tk
+ @rm -f core $(host-progs)
+ @$(MAKE) -C lxdialog mrproper
-include $(TOPDIR)/Rules.make
diff --git a/scripts/conmakehash.c b/scripts/conmakehash.c
new file mode 100644
index 000000000000..e0c6891a9ad4
--- /dev/null
+++ b/scripts/conmakehash.c
@@ -0,0 +1,293 @@
+/*
+ * conmakehash.c
+ *
+ * Create arrays for initializing the kernel folded tables (using a hash
+ * table turned out to be to limiting...) Unfortunately we can't simply
+ * preinitialize the tables at compile time since kfree() cannot accept
+ * memory not allocated by kmalloc(), and doing our own memory management
+ * just for this seems like massive overkill.
+ *
+ * Copyright (C) 1995-1997 H. Peter Anvin
+ *
+ * This program is a part of the Linux kernel, and may be freely
+ * copied under the terms of the GNU General Public License (GPL),
+ * version 2, or at your option any later version.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sysexits.h>
+#include <string.h>
+#include <ctype.h>
+
+#define MAX_FONTLEN 256
+
+typedef unsigned short unicode;
+
+void usage(char *argv0)
+{
+ fprintf(stderr, "Usage: \n"
+ " %s chartable [hashsize] [hashstep] [maxhashlevel]\n", argv0);
+ exit(EX_USAGE);
+}
+
+int getunicode(char **p0)
+{
+ char *p = *p0;
+
+ while (*p == ' ' || *p == '\t')
+ p++;
+ if (*p != 'U' || p[1] != '+' ||
+ !isxdigit(p[2]) || !isxdigit(p[3]) || !isxdigit(p[4]) ||
+ !isxdigit(p[5]) || isxdigit(p[6]))
+ return -1;
+ *p0 = p+6;
+ return strtol(p+2,0,16);
+}
+
+unicode unitable[MAX_FONTLEN][255];
+ /* Massive overkill, but who cares? */
+int unicount[MAX_FONTLEN];
+
+void addpair(int fp, int un)
+{
+ int i;
+
+ if ( un <= 0xfffe )
+ {
+ /* Check it isn't a duplicate */
+
+ for ( i = 0 ; i < unicount[fp] ; i++ )
+ if ( unitable[fp][i] == un )
+ return;
+
+ /* Add to list */
+
+ if ( unicount[fp] > 254 )
+ {
+ fprintf(stderr, "ERROR: Only 255 unicodes/glyph permitted!\n");
+ exit(EX_DATAERR);
+ }
+
+ unitable[fp][unicount[fp]] = un;
+ unicount[fp]++;
+ }
+
+ /* otherwise: ignore */
+}
+
+int main(int argc, char *argv[])
+{
+ FILE *ctbl;
+ char *tblname;
+ char buffer[65536];
+ int fontlen;
+ int i, nuni, nent;
+ int fp0, fp1, un0, un1;
+ char *p, *p1;
+
+ if ( argc < 2 || argc > 5 )
+ usage(argv[0]);
+
+ if ( !strcmp(argv[1],"-") )
+ {
+ ctbl = stdin;
+ tblname = "stdin";
+ }
+ else
+ {
+ ctbl = fopen(tblname = argv[1], "r");
+ if ( !ctbl )
+ {
+ perror(tblname);
+ exit(EX_NOINPUT);
+ }
+ }
+
+ /* For now we assume the default font is always 256 characters. */
+ fontlen = 256;
+
+ /* Initialize table */
+
+ for ( i = 0 ; i < fontlen ; i++ )
+ unicount[i] = 0;
+
+ /* Now we come to the tricky part. Parse the input table. */
+
+ while ( fgets(buffer, sizeof(buffer), ctbl) != NULL )
+ {
+ if ( (p = strchr(buffer, '\n')) != NULL )
+ *p = '\0';
+ else
+ fprintf(stderr, "%s: Warning: line too long\n", tblname);
+
+ p = buffer;
+
+/*
+ * Syntax accepted:
+ * <fontpos> <unicode> <unicode> ...
+ * <range> idem
+ * <range> <unicode range>
+ *
+ * where <range> ::= <fontpos>-<fontpos>
+ * and <unicode> ::= U+<h><h><h><h>
+ * and <h> ::= <hexadecimal digit>
+ */
+
+ while (*p == ' ' || *p == '\t')
+ p++;
+ if (!*p || *p == '#')
+ continue; /* skip comment or blank line */
+
+ fp0 = strtol(p, &p1, 0);
+ if (p1 == p)
+ {
+ fprintf(stderr, "Bad input line: %s\n", buffer);
+ exit(EX_DATAERR);
+ }
+ p = p1;
+
+ while (*p == ' ' || *p == '\t')
+ p++;
+ if (*p == '-')
+ {
+ p++;
+ fp1 = strtol(p, &p1, 0);
+ if (p1 == p)
+ {
+ fprintf(stderr, "Bad input line: %s\n", buffer);
+ exit(EX_DATAERR);
+ }
+ p = p1;
+ }
+ else
+ fp1 = 0;
+
+ if ( fp0 < 0 || fp0 >= fontlen )
+ {
+ fprintf(stderr,
+ "%s: Glyph number (0x%x) larger than font length\n",
+ tblname, fp0);
+ exit(EX_DATAERR);
+ }
+ if ( fp1 && (fp1 < fp0 || fp1 >= fontlen) )
+ {
+ fprintf(stderr,
+ "%s: Bad end of range (0x%x)\n",
+ tblname, fp1);
+ exit(EX_DATAERR);
+ }
+
+ if (fp1)
+ {
+ /* we have a range; expect the word "idem" or a Unicode range of the
+ same length */
+ while (*p == ' ' || *p == '\t')
+ p++;
+ if (!strncmp(p, "idem", 4))
+ {
+ for (i=fp0; i<=fp1; i++)
+ addpair(i,i);
+ p += 4;
+ }
+ else
+ {
+ un0 = getunicode(&p);
+ while (*p == ' ' || *p == '\t')
+ p++;
+ if (*p != '-')
+ {
+ fprintf(stderr,
+"%s: Corresponding to a range of font positions, there should be a Unicode range\n",
+ tblname);
+ exit(EX_DATAERR);
+ }
+ p++;
+ un1 = getunicode(&p);
+ if (un0 < 0 || un1 < 0)
+ {
+ fprintf(stderr,
+"%s: Bad Unicode range corresponding to font position range 0x%x-0x%x\n",
+ tblname, fp0, fp1);
+ exit(EX_DATAERR);
+ }
+ if (un1 - un0 != fp1 - fp0)
+ {
+ fprintf(stderr,
+"%s: Unicode range U+%x-U+%x not of the same length as font position range 0x%x-0x%x\n",
+ tblname, un0, un1, fp0, fp1);
+ exit(EX_DATAERR);
+ }
+ for(i=fp0; i<=fp1; i++)
+ addpair(i,un0-fp0+i);
+ }
+ }
+ else
+ {
+ /* no range; expect a list of unicode values for a single font position */
+
+ while ( (un0 = getunicode(&p)) >= 0 )
+ addpair(fp0, un0);
+ }
+ while (*p == ' ' || *p == '\t')
+ p++;
+ if (*p && *p != '#')
+ fprintf(stderr, "%s: trailing junk (%s) ignored\n", tblname, p);
+ }
+
+ /* Okay, we hit EOF, now output hash table */
+
+ fclose(ctbl);
+
+
+ /* Compute total size of Unicode list */
+ nuni = 0;
+ for ( i = 0 ; i < fontlen ; i++ )
+ nuni += unicount[i];
+
+ printf("\
+/*\n\
+ * Do not edit this file; it was automatically generated by\n\
+ *\n\
+ * conmakehash %s > [this file]\n\
+ *\n\
+ */\n\
+\n\
+#include <linux/types.h>\n\
+\n\
+u8 dfont_unicount[%d] = \n\
+{\n\t", argv[1], fontlen);
+
+ for ( i = 0 ; i < fontlen ; i++ )
+ {
+ printf("%3d", unicount[i]);
+ if ( i == fontlen-1 )
+ printf("\n};\n");
+ else if ( i % 8 == 7 )
+ printf(",\n\t");
+ else
+ printf(", ");
+ }
+
+ printf("\nu16 dfont_unitable[%d] = \n{\n\t", nuni);
+
+ fp0 = 0;
+ nent = 0;
+ for ( i = 0 ; i < nuni ; i++ )
+ {
+ while ( nent >= unicount[fp0] )
+ {
+ fp0++;
+ nent = 0;
+ }
+ printf("0x%04x", unitable[fp0][nent++]);
+ if ( i == nuni-1 )
+ printf("\n};\n");
+ else if ( i % 8 == 7 )
+ printf(",\n\t");
+ else
+ printf(", ");
+ }
+
+ exit(EX_OK);
+}
diff --git a/scripts/lxdialog/Makefile b/scripts/lxdialog/Makefile
index 1ab9518b1656..153c8b99ffdd 100644
--- a/scripts/lxdialog/Makefile
+++ b/scripts/lxdialog/Makefile
@@ -39,5 +39,5 @@ ncurses:
exit 1 ;\
fi
-clean:
- rm -f core *.o *~ lxdialog
+mrproper:
+ @rm -f core $(host-progs) $(lxdialog-objs) ncurses