Module Name: src
Committed By: uebayasi
Date: Tue Sep 1 14:32:20 UTC 2015
Modified Files:
src/usr.bin/config: main.c
Log Message:
Prepare to build subdirectories. Not enabled yet.
To generate a diff of this commit:
cvs rdiff -u -r1.82 -r1.83 src/usr.bin/config/main.c
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/main.c
diff -u src/usr.bin/config/main.c:1.82 src/usr.bin/config/main.c:1.83
--- src/usr.bin/config/main.c:1.82 Tue Sep 1 01:50:14 2015
+++ src/usr.bin/config/main.c Tue Sep 1 14:32:20 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: main.c,v 1.82 2015/09/01 01:50:14 pgoyette Exp $ */
+/* $NetBSD: main.c,v 1.83 2015/09/01 14:32:20 uebayasi Exp $ */
/*
* Copyright (c) 1992, 1993
@@ -45,7 +45,7 @@
#endif
#include <sys/cdefs.h>
-__RCSID("$NetBSD: main.c,v 1.82 2015/09/01 01:50:14 pgoyette Exp $");
+__RCSID("$NetBSD: main.c,v 1.83 2015/09/01 14:32:20 uebayasi Exp $");
#ifndef MAKE_BOOTSTRAP
#include <sys/cdefs.h>
@@ -122,6 +122,7 @@ static int undo_option(struct hashtab *,
static int crosscheck(void);
static int badstar(void);
int main(int, char **);
+static int mksubdirs(void);
static int mksymlinks(void);
static int mkident(void);
static int devbase_has_dead_instances(const char *, void *, void *);
@@ -516,7 +517,7 @@ main(int argc, char **argv)
/*
* Ready to go. Build all the various files.
*/
- if (mksymlinks() || mkmakefile() || mkheaders() || mkswap() ||
+ if (mksubdirs() || mksymlinks() || mkmakefile() || mkheaders() || mkswap() ||
mkioconf() || (do_devsw ? mkdevsw() : 0) || mkident() || errors)
stop();
(void)printf("Build directory is %s\n", builddir);
@@ -617,6 +618,59 @@ recreate(const char *p, const char *q)
return ret;
}
+static void
+mksubdir(char *buf)
+{
+ char *p;
+ struct stat st;
+
+ p = strrchr(buf, '/');
+ if (p != NULL && *p == '/') {
+ *p = '\0';
+ mksubdir(buf);
+ *p = '/';
+ }
+ if (stat(buf, &st) == 0) {
+ if (!S_ISDIR(st.st_mode))
+ errx(EXIT_FAILURE, "not directory %s", buf);
+ } else
+ if (mkdir(buf, 0777) == -1)
+ errx(EXIT_FAILURE, "cannot create %s", buf);
+}
+
+static int
+mksubdirs(void)
+{
+ struct files *fi;
+ const char *prefix, *sep;
+ char buf[MAXPATHLEN];
+
+ // XXX notyet
+ if (1)
+ return 0;
+
+ TAILQ_FOREACH(fi, &allfiles, fi_next) {
+ if ((fi->fi_flags & FI_SEL) == 0)
+ continue;
+ prefix = sep = "";
+ if (fi->fi_buildprefix != NULL) {
+ prefix = fi->fi_buildprefix;
+ sep = "/";
+ } else {
+ if (fi->fi_prefix != NULL) {
+ prefix = fi->fi_prefix;
+ sep = "/";
+ }
+ }
+ snprintf(buf, sizeof(buf), "%s%s%s", prefix, sep, fi->fi_dir);
+ if (buf[0] == '\0')
+ continue;
+ mksubdir(buf);
+ }
+
+ return 0;
+}
+
/*
* Make a symlink for "machine" so that "#include <machine/foo.h>" works,
* and for the machine's CPU architecture, so that works as well.