>Number: 187712 >Category: kern >Synopsis: config(8) does not respect KERNCONFDIR >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Tue Mar 18 22:20:00 UTC 2014 >Closed-Date: >Last-Modified: >Originator: Alan Somers >Release: 11.0 CURRENT >Organization: Spectra Logic >Environment: FreeBSD alans-fbsd-head 11.0-CURRENT FreeBSD 11.0-CURRENT #40 r263266: Mon Mar 17 13:07:35 MDT 2014 al...@ns1.eng.sldomain.com:/vmpool/obj/usr/home/alans/freebsd/head/sys/GENERIC amd64 >Description: When doing a buildkernel, you can set the make variable KERNCONFDIR if the kernel config file is in a location other than sys/${ARCH}/conf. However, if your kernel config file uses the "include" statement to include another config file, config(8) will not search in KERNCONFDIR to find the included file. My patch makes config(8) aware of KERNCONFDIR when processing the "include" statement, and causes make to set KERNCONFDIR when invoking config(8).
This bug is the more general case of ports/164242. >How-To-Repeat: # cd /usr/src # cp sys/amd64/conf/GENERIC /tmp/GENERIC_dup # echo "include GENERIC_dup" > /tmp/GENERIC2 # make KERNCONFDIR="/tmp" KERNCONF=GENERIC2 buildkernel -------------------------------------------------------------- >Fix: Apply attached patch Patch attached with submission follows: Index: Makefile.inc1 =================================================================== --- Makefile.inc1 (revision 263266) +++ Makefile.inc1 (working copy) @@ -1013,7 +1013,7 @@ @echo ">>> stage 1: configuring the kernel" @echo "--------------------------------------------------------------" cd ${KRNLCONFDIR}; \ - PATH=${TMPPATH} \ + PATH=${TMPPATH} KERNCONFDIR=${KERNCONFDIR} \ config ${CONFIGARGS} -d ${KRNLOBJDIR}/${_kernel} \ ${KERNCONFDIR}/${_kernel} .endif Index: usr.sbin/config/lang.l =================================================================== --- usr.sbin/config/lang.l (revision 263266) +++ usr.sbin/config/lang.l (working copy) @@ -34,6 +34,7 @@ #include <assert.h> #include <ctype.h> #include <err.h> +#include <stdlib.h> #include <string.h> #include "y.tab.h" #include "config.h" @@ -258,6 +259,7 @@ FILE *fp; struct incl *in; char *fnamebuf; + char *kernconfdir; fnamebuf = NULL; fp = fopen(fname, "r"); @@ -269,6 +271,16 @@ } } if (fp == NULL) { + kernconfdir = getenv("KERNCONFDIR"); + if (kernconfdir != NULL) { + asprintf(&fnamebuf, "%s/%s", kernconfdir, fname); + if (fnamebuf != NULL) { + fp = fopen(fnamebuf, "r"); + free(fnamebuf); + } + } + } + if (fp == NULL) { yyerror("cannot open included file"); return (-1); } >Release-Note: >Audit-Trail: >Unformatted: >>> Kernel build for GENERIC2 started on Tue Mar 18 12:13:27 MDT 2014 -------------------------------------------------------------- ===> GENERIC2 mkdir -p /vmpool/obj/usr/home/alans/freebsd/head/sys -------------------------------------------------------------- >>> stage 1: configuring the kernel -------------------------------------------------------------- cd /usr/home/alans/freebsd/head/sys/amd64/conf; PATH=/vmpool/obj/usr/home/alans/freebsd/head/tmp/legacy/usr/sbin:/vmpool/obj/usr/home/alans/freebsd/head/tmp/legacy/usr/bin:/vmpool/obj/usr/home/alans/freebsd/head/tmp/legacy/usr/games:/vmpool/obj/usr/home /alans/freebsd/head/tmp/legacy/bin:/vmpool/obj/usr/home/alans/freebsd/head/tmp/usr/sbin:/vmpool/obj/usr/home/alans/freebsd/head/tmp/usr/bin:/vmpool/obj/usr/home/alans/freebsd/head/tmp/usr/games:/sbin:/bin:/usr/sbin:/usr/bin config -d /vmpool/obj/usr/ho me/alans/freebsd/head/sys/GENERIC2 /tmp/GENERIC2 config: /tmp/GENERIC2:2: cannot open included file *** Error code 1 _______________________________________________ freebsd-bugs@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-bugs To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"