xref: /netbsd-src/share/mk/bsd.info.mk (revision a239fd4c8d223bfe1ab663b0c308383da7c64582)
1#	$NetBSD: bsd.info.mk,v 1.46 2024/08/18 03:49:23 rin Exp $
2
3.include <bsd.init.mk>
4
5##### Basic targets
6realinstall:	infoinstall
7
8##### Default values
9INFOFLAGS?=
10
11INFOFILES?=
12
13##### Build rules
14.if ${MKINFO} != "no"
15
16.if defined(TEXINFO)
17INFOFILES=	${TEXINFO:C/\.te?xi(nfo)?$/.info/}
18
19realall:	${INFOFILES}
20.NOPATH:	${INFOFILES}
21
22.SUFFIXES: .txi .texi .texinfo .info
23
24.txi.info .texi.info .texinfo.info:
25	${_MKTARGET_CREATE}
26	${TOOL_MAKEINFO} ${INFOFLAGS} --no-split --no-version-header -o ${.TARGET} ${.IMPSRC}
27.endif # defined(TEXINFO)
28
29.endif # ${MKINFO} != "no"
30
31##### Install rules
32infoinstall::	# ensure existence
33.PHONY:		infoinstall
34
35.if ${MKINFO} != "no"
36
37INFODIRFILE=${DESTDIR}${INFODIR}/dir
38
39# serialize access to ${INFODIRFILE}; needed for parallel makes
40__infoinstall: .USE
41	${_MKTARGET_INSTALL}
42	${INSTALL_FILE} \
43	    -o ${INFOOWN_${.ALLSRC:T}:U${INFOOWN}} \
44	    -g ${INFOGRP_${.ALLSRC:T}:U${INFOGRP}} \
45	    -m ${INFOMODE_${.ALLSRC:T}:U${INFOMODE}} \
46	    ${.ALLSRC} ${.TARGET}
47	@[ -f ${INFODIRFILE} ] || touch ${INFODIRFILE}; 		\
48	while ! ln ${INFODIRFILE} ${INFODIRFILE}.lock 2> /dev/null;	\
49		do sleep 1; done;					\
50	! [ -s ${INFODIRFILE} ] && rm -f ${INFODIRFILE} ||		\
51	${TOOL_INSTALL_INFO} -d ${INFODIRFILE} -r ${.TARGET} 2> /dev/null; \
52	${TOOL_INSTALL_INFO} -d ${INFODIRFILE} ${.TARGET};		\
53	${TOOL_SORTINFO} < ${INFODIRFILE} > ${INFODIRFILE}.tmp;		\
54	${MV} ${INFODIRFILE}.tmp ${INFODIRFILE};			\
55	rm -f ${INFODIRFILE}.lock
56
57
58.for F in ${INFOFILES:O:u}
59_FDIR:=		${INFODIR_${F}:U${INFODIR}}		# dir overrides
60_FNAME:=	${INFONAME_${F}:U${INFONAME:U${F:T}}}	# name overrides
61_F:=		${DESTDIR}${_FDIR}/${_FNAME}		# installed path
62
63.if ${MKUPDATE} == "no"
64${_F}!		${F} __infoinstall			# install rule
65.if !defined(BUILD) && !make(all) && !make(${F})
66${_F}!		.MADE					# no build at install
67.endif
68.else
69${_F}:		${F} __infoinstall			# install rule
70.if !defined(BUILD) && !make(all) && !make(${F})
71${_F}:		.MADE					# no build at install
72.endif
73.endif
74
75infoinstall::	${_F}
76.PRECIOUS:	${_F}					# keep if install fails
77.endfor
78
79.undef _FDIR
80.undef _FNAME
81.undef _F
82.endif # ${MKINFO} != "no"
83
84##### Clean rules
85.if defined(TEXINFO)
86CLEANDIRFILES+=	${INFOFILES}
87.endif
88
89##### Pull in related .mk logic
90.include <bsd.obj.mk>
91.include <bsd.sys.mk>
92.include <bsd.clean.mk>
93
94${TARGETS}:	# ensure existence
95