summaryrefslogtreecommitdiffstats
path: root/usr.sbin/config/main.c
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>2001-01-29 09:34:43 +0000
committerpeter <peter@FreeBSD.org>2001-01-29 09:34:43 +0000
commit2c6ef92d83b54b2a2a2203ee3860bc46a6c56341 (patch)
tree31c0fbd94db98e38e9866adbfdb54c5c2ac20dc2 /usr.sbin/config/main.c
parent585529610f4457556d1e822cefc55763a21603fc (diff)
downloadFreeBSD-src-2c6ef92d83b54b2a2a2203ee3860bc46a6c56341.zip
FreeBSD-src-2c6ef92d83b54b2a2a2203ee3860bc46a6c56341.tar.gz
I confess. This is a truely nasty hack. I am so ashamed!
(I think config(8) source does bad things to your brain :-) Clean up likely stray *.h files in the build directory. Eg: if isa.h ceases being generated, zap it. The heuristics to figure out a 'likely' file are pretty revolting.
Diffstat (limited to 'usr.sbin/config/main.c')
-rw-r--r--usr.sbin/config/main.c57
1 files changed, 57 insertions, 0 deletions
diff --git a/usr.sbin/config/main.c b/usr.sbin/config/main.c
index ed04c8d..520d4fa 100644
--- a/usr.sbin/config/main.c
+++ b/usr.sbin/config/main.c
@@ -55,6 +55,7 @@ static const char rcsid[] =
#include <stdio.h>
#include <sysexits.h>
#include <unistd.h>
+#include <dirent.h>
#include "y.tab.h"
#include "config.h"
@@ -78,6 +79,7 @@ int profiling;
static void configfile(void);
static void get_srcdir(void);
static void usage(void);
+static void cleanheaders(char *, time_t);
/*
* Config builds a set of files for building a UNIX
@@ -90,6 +92,9 @@ main(int argc, char **argv)
struct stat buf;
int ch, len;
char *p;
+ time_t starttime;
+
+ starttime = time(0);
while ((ch = getopt(argc, argv, "d:gp")) != -1)
switch (ch) {
@@ -171,6 +176,7 @@ main(int argc, char **argv)
makefile(); /* build Makefile */
headers(); /* make a lot of .h files */
configfile(); /* put config file into kernel*/
+ cleanheaders(p, starttime);
printf("Kernel build directory is %s\n", p);
exit(0);
}
@@ -409,3 +415,54 @@ moveifchanged(const char *from_name, const char *to_name)
err(EX_OSERR, "unlink(%s)", from_name);
}
}
+
+static void
+cleanheaders(char *p, time_t starttime)
+{
+ DIR *dirp;
+ struct dirent *dp;
+ struct stat st;
+ struct file_list *fl;
+ int i;
+
+ starttime--;
+
+ /*
+ * Scan the build directory and clean out stuff that looks like
+ * it might have been a leftover NFOO header, etc.
+ */
+ dirp = opendir(p);
+ while ((dp = readdir(dirp)) != NULL) {
+ i = dp->d_namlen - 2;
+ /* Skip non-headers */
+ if (dp->d_name[i] != '.' || dp->d_name[i + 1] != 'h')
+ continue;
+ /* Skip stuff that config created or examined in this pass */
+ if (stat(path(dp->d_name), &st) == -1)
+ err(1, "stat(%s)", dp->d_name);
+ if (st.st_mtime >= starttime || st.st_atime >= starttime ||
+ st.st_ctime >= starttime)
+ continue;
+ /* Skip special stuff, eg: bus_if.h, but check opt_*.h */
+ if (index(dp->d_name, '_') &&
+ strncmp(dp->d_name, "opt_", 4) != 0)
+ continue;
+ /* Some more magic names to skip. Sigh. */
+ if (strcmp(dp->d_name, "setdefs.h") == 0 ||
+ strcmp(dp->d_name, "y.tab.h") == 0)
+ continue;
+ /* Check if it is a target file */
+ for (fl = ftab; fl != NULL; fl = fl->f_next) {
+ if (strcmp(dp->d_name, fl->f_fn) == 0) {
+ break;
+ }
+ }
+ if (fl)
+ continue;
+ printf("Removing stale header: %s\n", dp->d_name);
+ unlink(path(dp->d_name));
+ }
+ (void)closedir(dirp);
+
+}
+
OpenPOWER on IntegriCloud