Module Name:    src
Committed By:   uebayasi
Date:           Fri Sep  4 10:16:35 UTC 2015

Modified Files:
        src/usr.bin/config: defs.h files.c mkmakefile.c scan.l

Log Message:
Sort files in ${ALLFILES} in the order of parsing of `files.*'.

config(1) reads the first `files.${MACHINE}' when it encounters `machine'.
Then it includes common `files.${MACHINE_SUBARCH}', `files.${MACHINE_ARCH}',
and MI `sys/conf/files' at last.  This change makes the first "file" in
`files.${MACHINE}' appear first in ${ALLFILES}.


To generate a diff of this commit:
cvs rdiff -u -r1.92 -r1.93 src/usr.bin/config/defs.h
cvs rdiff -u -r1.32 -r1.33 src/usr.bin/config/files.c
cvs rdiff -u -r1.67 -r1.68 src/usr.bin/config/mkmakefile.c
cvs rdiff -u -r1.24 -r1.25 src/usr.bin/config/scan.l

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.bin/config/defs.h
diff -u src/usr.bin/config/defs.h:1.92 src/usr.bin/config/defs.h:1.93
--- src/usr.bin/config/defs.h:1.92	Fri Sep  4 06:10:47 2015
+++ src/usr.bin/config/defs.h	Fri Sep  4 10:16:35 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: defs.h,v 1.92 2015/09/04 06:10:47 uebayasi Exp $	*/
+/*	$NetBSD: defs.h,v 1.93 2015/09/04 10:16:35 uebayasi Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -353,6 +353,7 @@ struct files {
 	struct nvlist *fi_optf; /* flattened version of above, if needed */
 	const char *fi_mkrule;	/* special make rule, if any */
 	struct attr *fi_attr;	/* owner attr */
+	int fi_order;		/* score of order in ${ALLFILES} */
 	TAILQ_ENTRY(files) fi_anext;	/* next file in attr */
 };
 
@@ -362,6 +363,9 @@ struct files {
 #define	FI_NEEDSFLAG	0x04	/* needs-flag */
 #define	FI_HIDDEN	0x08	/* obscured by other(s), base names overlap */
 
+extern size_t nselfiles;
+extern struct files **selfiles;
+
 /*
  * Condition expressions.
  */
@@ -613,6 +617,7 @@ u_short	currentline(void);
 int	firstfile(const char *);
 void	package(const char *);
 int	include(const char *, int, int, int);
+extern int includedepth;
 
 /* sem.c, other than for yacc actions */
 void	initsem(void);

Index: src/usr.bin/config/files.c
diff -u src/usr.bin/config/files.c:1.32 src/usr.bin/config/files.c:1.33
--- src/usr.bin/config/files.c:1.32	Fri Sep  4 06:01:40 2015
+++ src/usr.bin/config/files.c	Fri Sep  4 10:16:35 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: files.c,v 1.32 2015/09/04 06:01:40 uebayasi Exp $	*/
+/*	$NetBSD: files.c,v 1.33 2015/09/04 10:16:35 uebayasi Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -45,7 +45,7 @@
 #endif
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: files.c,v 1.32 2015/09/04 06:01:40 uebayasi Exp $");
+__RCSID("$NetBSD: files.c,v 1.33 2015/09/04 10:16:35 uebayasi Exp $");
 
 #include <sys/param.h>
 #include <errno.h>
@@ -57,6 +57,10 @@ __RCSID("$NetBSD: files.c,v 1.32 2015/09
 
 extern const char *yyfile;
 
+int nallfiles;
+size_t nselfiles;
+struct files **selfiles;
+
 /*
  * We check that each full path name is unique.  File base names
  * should generally also be unique, e.g., having both a net/xx.c and
@@ -181,6 +185,7 @@ addfile(const char *path, struct condexp
 	fi->fi_optf = NULL;
 	fi->fi_mkrule = rule;
 	fi->fi_attr = NULL;
+	fi->fi_order = (int)nallfiles + (includedepth << 16);
 	switch (fi->fi_suffix) {
 	case 'c':
 		TAILQ_INSERT_TAIL(&allcfiles, fi, fi_snext);
@@ -202,6 +207,8 @@ addfile(const char *path, struct condexp
 		    "unknown suffix");
 		break;
 	}
+	CFGDBG(3, "file added `%s' at order score %d", fi->fi_path, fi->fi_order);
+	nallfiles++;
 	return;
  bad:
 	if (optx != NULL) {
@@ -263,6 +270,21 @@ checkaux(const char *name, void *context
 	return (0);
 }
 
+static int
+cmpfiles(const void *a, const void *b)
+{
+	const struct files * const *fia = a, * const *fib = b;
+	int sa = (*fia)->fi_order;
+	int sb = (*fib)->fi_order;
+
+	if (sa < sb)
+		return -1;
+	else if (sa > sb)
+		return 1;
+	else
+		return 0;
+}
+
 /*
  * We have finished reading everything.  Tack the files down: calculate
  * selection and counts as needed.  Check that the object files built
@@ -277,6 +299,9 @@ fixfiles(void)
 	struct config *cf;
  	char swapname[100];
 
+	/* Place these files at last. */
+	int onallfiles = nallfiles;
+	nallfiles = 1 << 30;
 	addfile("devsw.c", NULL, 0, NULL);
 	addfile("ioconf.c", NULL, 0, NULL);
 
@@ -285,6 +310,7 @@ fixfiles(void)
  		    cf->cf_name);
  		addfile(intern(swapname), NULL, 0, NULL);
  	}
+	nallfiles = onallfiles;
 
 	err = 0;
 	TAILQ_FOREACH(fi, &allfiles, fi_next) {
@@ -334,6 +360,7 @@ fixfiles(void)
 			}
 		}
 		fi->fi_flags |= FI_SEL;
+		nselfiles++;
 		CFGDBG(3, "file selected `%s'", fi->fi_path);
 
 		/* Add other files to the default "netbsd" attribute. */
@@ -343,6 +370,16 @@ fixfiles(void)
 		CFGDBG(3, "file `%s' belongs to attr `%s'", fi->fi_path,
 		    fi->fi_attr->a_name);
 	}
+
+	/* Order files. */
+	selfiles = malloc(nselfiles * sizeof(fi));
+	int i = 0;
+	TAILQ_FOREACH(fi, &allfiles, fi_next) {
+		if ((fi->fi_flags & FI_SEL) == 0)
+			continue;
+		selfiles[i++] = fi;
+	}
+	qsort(selfiles, nselfiles, (unsigned)sizeof(fi), cmpfiles);
 	return (err);
 }
 

Index: src/usr.bin/config/mkmakefile.c
diff -u src/usr.bin/config/mkmakefile.c:1.67 src/usr.bin/config/mkmakefile.c:1.68
--- src/usr.bin/config/mkmakefile.c:1.67	Fri Sep  4 06:10:47 2015
+++ src/usr.bin/config/mkmakefile.c	Fri Sep  4 10:16:35 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: mkmakefile.c,v 1.67 2015/09/04 06:10:47 uebayasi Exp $	*/
+/*	$NetBSD: mkmakefile.c,v 1.68 2015/09/04 10:16:35 uebayasi Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -45,7 +45,7 @@
 #endif
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: mkmakefile.c,v 1.67 2015/09/04 06:10:47 uebayasi Exp $");
+__RCSID("$NetBSD: mkmakefile.c,v 1.68 2015/09/04 10:16:35 uebayasi Exp $");
 
 #include <sys/param.h>
 #include <ctype.h>
@@ -470,13 +470,13 @@ emitallfiles(FILE *fp)
 {
 	struct files *fi;
 	static int called;
+	int i;
 	int found = 0;
 
 	if (called++ != 0)
 		return;
-	TAILQ_FOREACH(fi, &allfiles, fi_next) {
-		if ((fi->fi_flags & FI_SEL) == 0)
-			continue;
+	for (i = 0; i < (int)nselfiles; i++) {
+		fi = selfiles[i];
 		if (found++ == 0)
 			fprintf(fp, "ALLFILES= \\\n");
 		putc('\t', fp);
@@ -493,18 +493,18 @@ static void
 emitrules(FILE *fp)
 {
 	struct files *fi;
+	int i;
 	int found = 0;
 
-	TAILQ_FOREACH(fi, &allfiles, fi_next) {
-		if ((fi->fi_flags & FI_SEL) == 0)
-			continue;
+	for (i = 0; i < (int)nselfiles; i++) {
+		fi = selfiles[i];
 		if (fi->fi_mkrule == NULL)
 			continue;
 		fprintf(fp, "%s.o: ", fi->fi_base);
 		emitfile(fp, fi);
 		putc('\n', fp);
 		fprintf(fp, "\t%s\n\n", fi->fi_mkrule);
-		found = 1;
+		found++;
 	}
 	if (found == 0)
 		fprintf(fp, "#%%RULES\n");

Index: src/usr.bin/config/scan.l
diff -u src/usr.bin/config/scan.l:1.24 src/usr.bin/config/scan.l:1.25
--- src/usr.bin/config/scan.l:1.24	Tue Sep  1 13:42:48 2015
+++ src/usr.bin/config/scan.l	Fri Sep  4 10:16:35 2015
@@ -1,5 +1,5 @@
 %{
-/*	$NetBSD: scan.l,v 1.24 2015/09/01 13:42:48 uebayasi Exp $	*/
+/*	$NetBSD: scan.l,v 1.25 2015/09/04 10:16:35 uebayasi Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -42,7 +42,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: scan.l,v 1.24 2015/09/01 13:42:48 uebayasi Exp $");
+__RCSID("$NetBSD: scan.l,v 1.25 2015/09/04 10:16:35 uebayasi Exp $");
 
 #include <sys/param.h>
 #include <errno.h>
@@ -476,6 +476,8 @@ package(const char *fname)
 	free(fname2);
 }
 
+int includedepth;
+
 /*
  * Open the named file for inclusion at the current point.  Returns 0 on
  * success (file opened and previous state pushed), nonzero on failure
@@ -537,6 +539,7 @@ include(const char *fname, int ateof, in
 	yyfile = intern(s);
 	yyline = 1;
 	free(s);
+	includedepth++;
 	return (0);
 }
 
@@ -599,6 +602,8 @@ endinclude(void)
 	interesting = in->in_interesting;
 	free(in);
 
+	includedepth--;
+
 	return (ateof);
 }
 

Reply via email to