Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 11 Jun 1998 20:56:42 +1000
From:      Bruce Evans <bde@zeta.org.au>
To:        bde@zeta.org.au, ianh@tortuga.com.au
Cc:        current@FreeBSD.ORG
Subject:   Re: src Makefile fix
Message-ID:  <199806111056.UAA03420@godzilla.zeta.org.au>

next in thread | raw e-mail | index | archive | help
>> It would be better to make lex not depend on yacc -o (as it used to).
>> 
>Perhaps a conditional dependence on "yacc -o".  I'd like to be able to
>build -current of 2.2.5, or whatever release I have installed on my main
>machine.  The included patch will require users of older systems to modify
>/etc/make.conf, while letting the the newer system continue as now.
>
>The problem is that it is ugly, and as time goes on, will become a barnacle
>that needs to be removed.

This makes the extra build step look non-ugly :-).

>ndex: bsd.dep.mk
>===================================================================
>RCS file: /home/freebsd/cvs/src/share/mk/bsd.dep.mk,v
>retrieving revision 1.25
>diff -c -r1.25 bsd.dep.mk
>*** bsd.dep.mk  1998/06/05 18:38:54     1.25
>--- bsd.dep.mk  1998/06/11 09:16:34
>***************
>*** 55,70 ****
>  SRCS:=        ${SRCS} y.tab.h
>  CLEANFILES:= ${CLEANFILES} y.tab.c y.tab.h
>  .elif ${YFLAGS:M-d} != ""
>  .for _YH in ${_YC:S/.c/.h/}
>  .ORDER: ${_YC} ${_YH}
>  ${_YC} ${_YH}: ${_YSRC}
>!       ${YACC} ${YFLAGS} -o ${_YC} ${.ALLSRC}
>  SRCS:=        ${SRCS} ${_YH}
>  CLEANFILES:= ${CLEANFILES} ${_YH}
>  .endfor
>  .else
>  ${_YC}: ${_YSRC}
>!       ${YACC} ${YFLAGS} -o ${_YC} ${.ALLSRC}
>  .endif
>  .endfor
>  .endfor
>--- 55,78 ----
>  SRCS:=        ${SRCS} y.tab.h
>  CLEANFILES:= ${CLEANFILES} y.tab.c y.tab.h
>  .elif ${YFLAGS:M-d} != ""
>+ YACCOPY ?= no
>+ .if ${YACCOPY} == no
>+ _YO_OPT = -o ${_YC}
>+ _YO_MV =
>+ .else
>+ _YO_OPT =
>+ _YO_MV = mv y.tab.c ${_YC}
>+ .endif
>  .for _YH in ${_YC:S/.c/.h/}
>  .ORDER: ${_YC} ${_YH}
>  ${_YC} ${_YH}: ${_YSRC}
>!       ${YACC} ${YFLAGS} ${_YO_OPT} ${.ALLSRC}; ${_YO_MV}
>  SRCS:=        ${SRCS} ${_YH}
>  CLEANFILES:= ${CLEANFILES} ${_YH}
>  .endfor
>  .else
>  ${_YC}: ${_YSRC}
>!       ${YACC} ${YFLAGS} ${_YO_OPT} ${.ALLSRC}; ${_YO_MV}
>  .endif
>  .endfor
>  .endfor
>

I don't see how this actually works - it doesn't rename y.tab.h.  This
slightly broken version can be achieved using existing compatibility cruft
(y.tab.h in SRCS) instead of YACCOPY.  -o is not used when the applcation
wants y.tab.h instead of foo.h created from foo.y since foo.h might
(and in practice, does) conflict with a source file.  lex/Makefile can
explot this and rename (actually, copy) y.tab.h itself:

diff -c2 Makefile~ Makefile
*** Makefile~	Tue May  5 05:10:20 1998
--- Makefile	Thu Jun 11 20:36:09 1998
***************
*** 15,20 ****
  LINKS+=	${BINDIR}/lex ${BINDIR}/flex++
  
! SRCS=		scan.c ccl.c dfa.c ecs.c gen.c main.c misc.c nfa.c parse.y \
! 		skel.c sym.c tblcmp.c yylex.c
  LFLAGS+=	-is
  CFLAGS+=	-I. -I${.CURDIR}
--- 15,20 ----
  LINKS+=	${BINDIR}/lex ${BINDIR}/flex++
  
! SRCS=		scan.c ccl.c dfa.c ecs.c gen.c main.c misc.c nfa.c parse.h \
! 		parse.y skel.c sym.c tblcmp.c y.tab.h yylex.c
  LFLAGS+=	-is
  CFLAGS+=	-I. -I${.CURDIR}
***************
*** 24,28 ****
  MLINKS+=	lex.1 lex++.1
  
! CLEANFILES=	scan.c
  
  .if !defined(NOLIB)
--- 24,31 ----
  MLINKS+=	lex.1 lex++.1
  
! CLEANFILES=	parse.h scan.c
! 
! parse.h: y.tab.h
! 	cp ${.ALLSRC} ${.TARGET}
  
  .if !defined(NOLIB)

Bruce

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?199806111056.UAA03420>