Module Name: src Committed By: uebayasi Date: Thu Sep 3 02:45:24 UTC 2015
Modified Files: src/usr.bin/config: main.c Log Message: In `-S' mode, create symlinks from outside of $S to build directory, for files that are placed outside of $S, so that `Makefile.kern.inc' can see all files under either $S or build directory. To generate a diff of this commit: cvs rdiff -u -r1.85 -r1.86 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.85 src/usr.bin/config/main.c:1.86 --- src/usr.bin/config/main.c:1.85 Wed Sep 2 05:09:25 2015 +++ src/usr.bin/config/main.c Thu Sep 3 02:45:24 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: main.c,v 1.85 2015/09/02 05:09:25 uebayasi Exp $ */ +/* $NetBSD: main.c,v 1.86 2015/09/03 02:45:24 uebayasi Exp $ */ /* * Copyright (c) 1992, 1993 @@ -45,7 +45,7 @@ #endif #include <sys/cdefs.h> -__RCSID("$NetBSD: main.c,v 1.85 2015/09/02 05:09:25 uebayasi Exp $"); +__RCSID("$NetBSD: main.c,v 1.86 2015/09/03 02:45:24 uebayasi Exp $"); #ifndef MAKE_BOOTSTRAP #include <sys/cdefs.h> @@ -125,7 +125,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 mkallsubdirs(void); static int mksymlinks(void); static int mkident(void); static int devbase_has_dead_instances(const char *, void *, void *); @@ -524,7 +524,7 @@ main(int argc, char **argv) /* * Ready to go. Build all the various files. */ - if ((Sflag && mksubdirs()) || mksymlinks() || mkmakefile() || mkheaders() || mkswap() || + if ((Sflag && mkallsubdirs()) || mksymlinks() || mkmakefile() || mkheaders() || mkswap() || mkioconf() || (do_devsw ? mkdevsw() : 0) || mkident() || errors) stop(); (void)printf("Build directory is %s\n", builddir); @@ -650,13 +650,13 @@ mksubdir(char *buf) } static int -mksubdirs(void) +mksubdirs(struct filelist *fl) { struct files *fi; const char *prefix, *sep; char buf[MAXPATHLEN]; - TAILQ_FOREACH(fi, &allfiles, fi_next) { + TAILQ_FOREACH(fi, fl, fi_next) { if ((fi->fi_flags & FI_SEL) == 0) continue; prefix = sep = ""; @@ -673,13 +673,39 @@ mksubdirs(void) if (buf[0] == '\0') continue; mksubdir(buf); + if (fi->fi_prefix != NULL && fi->fi_buildprefix != NULL) { + const char *prologue, *sep; + char org[MAXPATHLEN]; + + if (fi->fi_prefix[0] == '/') { + prologue = ""; + sep = ""; + } else { + prologue = srcdir; + sep = "/"; + } + snprintf(buf, sizeof(buf), "%s%s%s", + fi->fi_buildprefix, "/", fi->fi_path); + snprintf(org, sizeof(org), "%s%s%s%s%s", + prologue, sep, fi->fi_prefix, "/", fi->fi_path); + recreate(org, buf); + fi->fi_prefix = fi->fi_buildprefix; + fi->fi_buildprefix = NULL; + } } - buildconfdir = "conf"; - return 0; } +static int +mkallsubdirs(void) +{ + + mksubdirs(&allfiles); + mksubdirs(&allofiles); + buildconfdir = "conf"; +} + /* * Make a symlink for "machine" so that "#include <machine/foo.h>" works, * and for the machine's CPU architecture, so that works as well.