aboutsummaryrefslogtreecommitdiff
path: root/contrib/bmake/mk/yacc.mk
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/bmake/mk/yacc.mk')
-rw-r--r--contrib/bmake/mk/yacc.mk28
1 files changed, 27 insertions, 1 deletions
diff --git a/contrib/bmake/mk/yacc.mk b/contrib/bmake/mk/yacc.mk
index 7f7e99578d70..30e377d1991c 100644
--- a/contrib/bmake/mk/yacc.mk
+++ b/contrib/bmake/mk/yacc.mk
@@ -1,4 +1,6 @@
-# $Id: yacc.mk,v 1.7 2020/08/19 17:51:53 sjg Exp $
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# $Id: yacc.mk,v 1.9 2024/02/17 17:26:57 sjg Exp $
#
# @(#) Copyright (c) 1999-2011, Simon J. Gerraty
@@ -23,6 +25,28 @@ RM?= rm
YACC.y?= ${YACC} ${YFLAGS}
+# first deal with explicit *.y in SRCS
+.for y in ${SRCS:M*.y}
+.if ${YACC.y:M-d} == "" || defined(NO_RENAME_Y_TAB_H)
+.ORDER: ${y:T:R}.c y.tab.h
+y.tab.h: .NOMETA
+${y:T:R}.c y.tab.h: $y
+ ${YACC.y} ${.IMPSRC}
+ [ ! -s y.tab.c ] || mv y.tab.c ${.TARGET}
+ ${RM} -f y.tab.[!h]
+.else
+.ORDER: ${y:T:R}.c ${y:T:R}.h
+${y:T:R}.h: .NOMETA
+${y:T:R}.c ${y:T:R}.h: $y
+ ${YACC.y} ${.IMPSRC}
+ [ ! -s y.tab.c ] || mv y.tab.c ${.TARGET:T:R}.c
+ [ ! -s y.tab.h ] || cmp -s y.tab.h ${.TARGET:T:R}.h \
+ || mv y.tab.h ${.TARGET:T:R}.h
+ ${RM} -f y.tab.*
+.endif
+.endfor
+
+.if ${SRCS:M*.y} == ""
.if ${YACC.y:M-d} == "" || defined(NO_RENAME_Y_TAB_H)
.y.c:
@@ -50,8 +74,10 @@ YACC.y?= ${YACC} ${YFLAGS}
{ [ ! -s y.tab.c ] || mv y.tab.c ${.TARGET}; \
${RM} y.tab.*; }; }
.endif
+.endif
beforedepend: ${SRCS:T:M*.y:S/.y/.c/g}
CLEANFILES+= ${SRCS:T:M*.y:S/.y/.[ch]/g}
CLEANFILES+= y.tab.[ch]
+