bridge(4): document net.link.bridge.pfil_onlyip
[dragonfly.git] / contrib / bmake / mk / yacc.mk
1 # $Id: yacc.mk,v 1.8 2022/06/22 04:51:06 sjg Exp $
2
3 #
4 #       @(#) Copyright (c) 1999-2011, Simon J. Gerraty
5 #
6 #       This file is provided in the hope that it will
7 #       be of use.  There is absolutely NO WARRANTY.
8 #       Permission to copy, redistribute or otherwise
9 #       use this file is hereby granted provided that
10 #       the above copyright notice and this notice are
11 #       left intact.
12 #
13 #       Please send copies of changes and bug-fixes to:
14 #       sjg@crufty.net
15 #
16
17 # this file contains rules to DTRT when SRCS contains foo.y or foo.c
18 # when only a foo.y exists.
19
20 YACC?= yacc
21 YFLAGS?= -v -t
22 RM?= rm
23
24 YACC.y?= ${YACC} ${YFLAGS}
25
26 # first deal with explicit *.y in SRCS
27 .for y in ${SRCS:M*.y}
28 .if ${YACC.y:M-d} == "" || defined(NO_RENAME_Y_TAB_H)
29 .ORDER: ${y:T:R}.c y.tab.h
30 y.tab.h: .NOMETA
31 ${y:T:R}.c y.tab.h: $y
32         ${YACC.y} ${.IMPSRC}
33         [ ! -s y.tab.c ] || mv y.tab.c ${.TARGET}
34         ${RM} -f y.tab.[!h]
35 .else
36 .ORDER: ${y:T:R}.c ${y:T:R}.h
37 ${y:T:R}.h: .NOMETA
38 ${y:T:R}.c ${y:T:R}.h: $y
39         ${YACC.y} ${.IMPSRC}
40         [ ! -s y.tab.c ] || mv y.tab.c ${.TARGET:T:R}.c
41         [ ! -s y.tab.h ] || cmp -s y.tab.h ${.TARGET:T:R}.h \
42                 || mv y.tab.h ${.TARGET:T:R}.h
43         ${RM} -f y.tab.*
44 .endif
45 .endfor
46
47 .if ${SRCS:M*.y} == ""
48 .if ${YACC.y:M-d} == "" || defined(NO_RENAME_Y_TAB_H)
49
50 .y.c:
51         ${YACC.y} ${.IMPSRC}
52         [ ! -s y.tab.c ] || mv y.tab.c ${.TARGET}
53         ${RM} -f y.tab.[!h]
54
55 .else
56
57 # the touch of the .c is to ensure it is newer than .h (paranoia)
58 .y.h:
59         ${YACC.y} ${.IMPSRC}
60         [ ! -s y.tab.c ] || mv y.tab.c ${.TARGET:T:R}.c
61         [ ! -s y.tab.h ] || cmp -s y.tab.h ${.TARGET:T:R}.h \
62                 || mv y.tab.h ${.TARGET:T:R}.h
63         touch ${.TARGET:T:R}.c
64         ${RM} -f y.tab.*
65
66 # Normally the .y.h rule does the work - to avoid races.
67 # If for any reason the .c is lost but the .h remains,
68 # regenerate the .c
69 .y.c:   ${.TARGET:T:R}.h
70         [ -s ${.TARGET} ] || { \
71                 ${YACC.y} ${.IMPSRC} && \
72                 { [ ! -s y.tab.c ] || mv y.tab.c ${.TARGET}; \
73                 ${RM} y.tab.*; }; }
74 .endif
75 .endif
76
77 beforedepend:   ${SRCS:T:M*.y:S/.y/.c/g}
78
79 CLEANFILES+= ${SRCS:T:M*.y:S/.y/.[ch]/g}
80 CLEANFILES+= y.tab.[ch]
81