Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 4 Sep 2001 11:24:29 +0300
From:      Ruslan Ermilov <ru@FreeBSD.ORG>
To:        Bruce Evans <bde@zeta.org.au>
Cc:        Jordan Hubbard <jkh@FreeBSD.ORG>, current@FreeBSD.ORG
Subject:   Re: Build problem in -current
Message-ID:  <20010904112429.A32825@sunbay.com>
In-Reply-To: <20010903210756.V7393-100000@alphplex.bde.org>; from bde@zeta.org.au on Mon, Sep 03, 2001 at 09:36:46PM %2B1000
References:  <20010902115310W.jkh@freebsd.org> <20010903210756.V7393-100000@alphplex.bde.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Sep 03, 2001 at 09:36:46PM +1000, Bruce Evans wrote:
> On Sun, 2 Sep 2001, Jordan Hubbard wrote:
> 
> > cd /usr/src/usr.bin/xinstall; make _EXTRADEPEND
> > echo xinstall: /usr/obj/usr/src/i386/usr/lib/libc.a  >> .depend
> > cc -O -pipe    -I/usr/obj/usr/src/i386/usr/include  -c /usr/src/usr.bin/xinstall
> > /xinstall.c
> > cc -O -pipe    -I/usr/obj/usr/src/i386/usr/include   -static -o xinstall xinstal
> > l.o
> > xinstall.o: In function `main':
> > xinstall.o(.text+0x83): undefined reference to `strtofflags'
> > *** Error code 1
> >
> > This is from a relatively old -current coming up to a new (today's)
> > -current.  I suspect somebody added a call for install yet forgot to
> > alter the bootstrap tools target accordingly (or did but in the wrong
> > place).  Thanks.
> 
> Index: Makefile
> ===================================================================
> RCS file: /home/ncvs/src/usr.bin/xinstall/Makefile,v
> retrieving revision 1.15
> diff -u -2 -r1.15 Makefile
> --- Makefile	2 Apr 2001 11:54:59 -0000	1.15
> +++ Makefile	3 Sep 2001 11:18:33 -0000
> @@ -2,6 +2,9 @@
>  # $FreeBSD: src/usr.bin/xinstall/Makefile,v 1.15 2001/04/02 11:54:59 ru Exp $
> 
> +.PATH: ${.CURDIR}/../../lib/libc/gen
> +
>  PROG=		xinstall
>  PROGNAME=	install
> +SRCS=		strtofflags.c xinstall.c
>  MAN=		install.1
> 
I don't like this, as it unconditionally compiles in strtofflags.c, even if
the host has libc support for it.  This also breaks single-module-checkout
compilation.  How about this instead?

The strtofflags() interface has been added
to HEAD in unistd.h,v 1.36, on 2000/06/17, and
to RELENG_4 in unistd.h,v 1.35.2.1, on 2000/07/03.

This change has not been reflected by the __FreeBSD_version bump.
The nearest (by date) version bumps are as follows:

CURRENT, param.h,v 1.72, 500007
RELENG_4, param.h,v 1.61.2.6: 400021

Index: Makefile
===================================================================
RCS file: /home/ncvs/src/usr.bin/xinstall/Makefile,v
retrieving revision 1.15
diff -u -r1.15 Makefile
--- Makefile	2001/04/02 11:54:59	1.15
+++ Makefile	2001/09/04 08:11:52
@@ -3,6 +3,22 @@
 
 PROG=		xinstall
 PROGNAME=	install
+SRCS=		xinstall.c
 MAN=		install.1
+
+# Get __FreeBSD_version
+.if !defined(OSVERSION)
+.if exists(/sbin/sysctl)
+OSVERSION!=	/sbin/sysctl -n kern.osreldate
+.else
+OSVERSION!=	/usr/sbin/sysctl -n kern.osreldate
+.endif
+.endif
+
+.if ${OSVERSION} < 400021 || \
+    ${OSVERSION} >= 500000 && ${OSVERSION} < 500007
+.PATH: ${.CURDIR}/../../lib/libc/gen
+SRCS+=		strtofflags.c
+.endif
 
 .include <bsd.prog.mk>

I also think that the ${OSVERSION} stuff should be in sys.mk.

> Unfixed bugs: this will have to be fixed better before turning on WARNS.
> strtofflags() won't be declared in the host includes if the host libraries
> don't have it.  Similarly in mtree (where I obtained this fix from) and
> in any other tools that use strtofflags().  All these bugs were missing in
> the old versions that used ls's version of strtofflags.
> 
This could be solved similarly from within xinstall.c.  I.e., we could
prototype strtofflags() and fflagstostr() manually if __FreeBSD_version
checks fail.

> Nearby bugs: mtree/Makefile uses !defined(WORLD) to avoid depending on
> the host having libmd, but someone removed the definition of WORLD from
> src/Makefile.inc1.
> 
The correct fix would be:

Index: Makefile
===================================================================
RCS file: /home/ncvs/src/usr.sbin/mtree/Makefile,v
retrieving revision 1.21
diff -u -r1.21 Makefile
--- Makefile	2001/07/20 06:20:02	1.21
+++ Makefile	2001/09/04 08:22:19
@@ -8,10 +8,10 @@
 SRCS=	compare.c crc.c create.c excludes.c misc.c mtree.c spec.c verify.c \
 	strtofflags.c
 
-.if !defined(WORLD)
+.include <bsd.prog.mk>
+
+.if defined(LIBMD) && exists(${LIBMD})
 CFLAGS+= -DMD5 -DSHA1 -DRMD160
 DPADD=	${LIBMD}
 LDADD=	-lmd
 .endif
-
-.include <bsd.prog.mk>


Cheers,
-- 
Ruslan Ermilov		Oracle Developer/DBA,
ru@sunbay.com		Sunbay Software AG,
ru@FreeBSD.org		FreeBSD committer,
+380.652.512.251	Simferopol, Ukraine

http://www.FreeBSD.org	The Power To Serve
http://www.oracle.com	Enabling The Information Age

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




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