Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 15 Aug 1999 19:37:32 -0700 (PDT)
From:      george+freebsd@m5p.com
To:        FreeBSD-gnats-submit@freebsd.org
Subject:   i386/13171: "config" not quite right for kernel not named "kernel"
Message-ID:  <199908160237.TAA08540@southstation.m5p.com>

next in thread | raw e-mail | index | archive | help

>Number:         13171
>Category:       i386
>Synopsis:       "config" not quite right for kernel not named "kernel"
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Sun Aug 15 19:40:01 PDT 1999
>Closed-Date:
>Last-Modified:
>Originator:     George Mitchell
>Release:        FreeBSD 3.2-RELEASE i386
>Organization:
Mitchell Voting Products, Inc.
>Environment:


>Description:

The config command generates a Makefile which assumes that the kernel
being configured will be named "kernel", even if the config statement
in the configuration file says otherwise.

>How-To-Repeat:

1. Create a kernel configuration file named TEST containing the line:
config frobozz root on da0
(and everything else necessary to configure a kernel).
2. Run "config" on this configuration file.
3. Observe that ../../compile/TEST/Makefile has multiple references
to the file "kernel" instead of "frobozz".

>Fix:
	
The following diff to /usr/src/usr.sbin/config/mkmakefile.c will
substitute the real kernel name for all occurences of %KERNEL in
the Makefile template file:


*** mkmakefile.c.orig	Tue Sep 15 14:07:54 1998
--- mkmakefile.c	Sun Aug 15 18:27:16 1999
***************
*** 148,153 ****
--- 148,155 ----
  	struct opt *op;
  	int warn_make_clean = 0;
  	int versreq;
+ 	struct file_list *fl;
+ 	char *kernel_name = 0;
  
  	read_files();
  	strcpy(line, "Makefile.");
***************
*** 190,201 ****
  		fprintf(ofp, "PROF=-pg\n");
  		fprintf(ofp, "PROFLEVEL=%d\n", profiling);
  	}
  	while (fgets(line, BUFSIZ, ifp) != 0) {
! 		if (*line != '%') {
! 			fprintf(ofp, "%s", line);
! 			continue;
  		}
! 		if (eq(line, "%BEFORE_DEPEND\n"))
  			do_before_depend(ofp);
  		else if (eq(line, "%OBJS\n"))
  			do_objs(ofp);
--- 192,223 ----
  		fprintf(ofp, "PROF=-pg\n");
  		fprintf(ofp, "PROFLEVEL=%d\n", profiling);
  	}
+ 	for (fl = conf_list; fl; fl = fl->f_next) {
+ 		if (fl->f_type == SYSTEMSPEC) {
+ 			kernel_name = fl->f_needs;
+ 			break;
+ 		}
+ 	}
  	while (fgets(line, BUFSIZ, ifp) != 0) {
! 		if ((*line != '%') || (strncmp (line, "%KERNEL", 7) == 0)) {
! 			char rewritten_line [256];
! 			char *ip, *op;
! 			for (ip = line, op = rewritten_line;
! 				*ip != '\0';
! 				) {
! 				if ((*ip != '%') ||
! 					(strncmp (ip, "%KERNEL", 7) != 0))
! 					*op++ = *ip++;
! 				else {
! 					strcpy (op, kernel_name);
! 					op += strlen (op);
! 					ip += 7;
! 				}
! 			}
! 			*op = '\0';
! 			fprintf(ofp, "%s", rewritten_line);
  		}
! 		else if (eq(line, "%BEFORE_DEPEND\n"))
  			do_before_depend(ofp);
  		else if (eq(line, "%OBJS\n"))
  			do_objs(ofp);




The following diff will put "%KERNEL" in the appropriate places
in /usr/src/sys/i386/conf/Makefile.i386:


*** Makefile.i386.orig	Sun Apr 25 05:44:06 1999
--- Makefile.i386	Sun Aug 15 18:20:32 1999
***************
*** 123,129 ****
  
  clean:
  	rm -f *.o *.so *.So *.ko *.s eddep errs genassym gensetdefs \
! 	      kernel linterrs makelinks param.c setdef[01].c setdefs.h \
  	      symbols.exclude symbols.sort tags \
  	      vers.c vnode_if.c vnode_if.h ${CLEAN}
  
--- 123,129 ----
  
  clean:
  	rm -f *.o *.so *.So *.ko *.s eddep errs genassym gensetdefs \
! 	      %KERNEL linterrs makelinks param.c setdef[01].c setdefs.h \
  	      symbols.exclude symbols.sort tags \
  	      vers.c vnode_if.c vnode_if.h ${CLEAN}
  
***************
*** 194,202 ****
  	rm -f .depend
  
  links:
! 	egrep '#if' ${CFILES:Nswapkernel.c} | sed -f $S/conf/defines | \
  	  sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink
! 	echo ${CFILES:Nswapkernel.c} | tr -s ' ' '\12' | sed 's/\.c/.o/' | \
  	  sort -u | comm -23 - dontlink | \
  	  sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks
  	sh makelinks && rm -f dontlink
--- 194,202 ----
  	rm -f .depend
  
  links:
! 	egrep '#if' ${CFILES:Nswap%KERNEL.c} | sed -f $S/conf/defines | \
  	  sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink
! 	echo ${CFILES:Nswap%KERNEL.c} | tr -s ' ' '\12' | sed 's/\.c/.o/' | \
  	  sort -u | comm -23 - dontlink | \
  	  sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks
  	sh makelinks && rm -f dontlink
***************
*** 205,216 ****
  	@echo "see $S/kern/Makefile for tags"
  
  install:
! 	@if [ ! -f kernel ] ; then \
  		echo "You must first build your kernel before trying to install." ; \
  		exit 1 ; \
  	fi
  .if ${KERNFORMAT} == "elf" && !defined(FORCE)
! 	@if [ -f /kernel -a "`file /kernel 2>/dev/null | grep ELF`" = "" ]; then \
  		echo "WARNING: You are about to install an ELF kernel for the first time!" ; \
  		echo "Please be sure you have upgraded your bootblocks and/or /boot/loader so" ; \
  		echo "that you can boot it.  Old bootblocks WILL NOT WORK!  Please read:" ; \
--- 205,216 ----
  	@echo "see $S/kern/Makefile for tags"
  
  install:
! 	@if [ ! -f %KERNEL ] ; then \
  		echo "You must first build your kernel before trying to install." ; \
  		exit 1 ; \
  	fi
  .if ${KERNFORMAT} == "elf" && !defined(FORCE)
! 	@if [ -f /%KERNEL -a "`file /%KERNEL 2>/dev/null | grep ELF`" = "" ]; then \
  		echo "WARNING: You are about to install an ELF kernel for the first time!" ; \
  		echo "Please be sure you have upgraded your bootblocks and/or /boot/loader so" ; \
  		echo "that you can boot it.  Old bootblocks WILL NOT WORK!  Please read:" ; \
***************
*** 219,236 ****
  		exit 1 ; \
  	fi
  .endif
! .if exists(${DESTDIR}/kernel)
! 	-chflags noschg ${DESTDIR}/kernel
! 	mv ${DESTDIR}/kernel ${DESTDIR}/kernel.old
  .endif
  	PATH=$${PATH}:/sbin:/usr/sbin; \
! 	if [ `sysctl -n kern.bootfile` = ${DESTDIR}/kernel ] ; then \
! 		sysctl -w kern.bootfile=${DESTDIR}/kernel.old ; \
  		if [ -f /var/db/kvm_kernel.db ] ; then \
  			mv -f /var/db/kvm_kernel.db /var/db/kvm_kernel.old.db ; \
  		fi \
  	fi
! 	install -c -m 555 -o root -g wheel -fschg kernel ${DESTDIR}/
  
  config.o:
  	${NORMAL_C}
--- 219,236 ----
  		exit 1 ; \
  	fi
  .endif
! .if exists(${DESTDIR}/%KERNEL)
! 	-chflags noschg ${DESTDIR}/%KERNEL
! 	mv ${DESTDIR}/%KERNEL ${DESTDIR}/%KERNEL.old
  .endif
  	PATH=$${PATH}:/sbin:/usr/sbin; \
! 	if [ `sysctl -n kern.bootfile` = ${DESTDIR}/%KERNEL ] ; then \
! 		sysctl -w kern.bootfile=${DESTDIR}/%KERNEL.old ; \
  		if [ -f /var/db/kvm_kernel.db ] ; then \
  			mv -f /var/db/kvm_kernel.db /var/db/kvm_kernel.old.db ; \
  		fi \
  	fi
! 	install -c -m 555 -o root -g wheel -fschg %KERNEL ${DESTDIR}/
  
  config.o:
  	${NORMAL_C}

>Release-Note:
>Audit-Trail:
>Unformatted:


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199908160237.TAA08540>