bsd.info.mk revision 245752
1189251Ssam# $FreeBSD: head/share/mk/bsd.info.mk 245752 2013-01-21 22:40:39Z brooks $
2209158Srpaulo#
3189251Ssam# The include file <bsd.info.mk> handles installing GNU (tech)info files.
4189251Ssam# Texinfo is a documentation system that uses a single source
5252726Srpaulo# file to produce both on-line information and printed output.
6252726Srpaulo#
7189251Ssam#
8189251Ssam# +++ variables +++
9189251Ssam#
10189251Ssam# CLEANFILES	Additional files to remove for the clean and cleandir targets.
11189251Ssam#
12252726Srpaulo# DESTDIR	Change the tree where the info files gets installed. [not set]
13189251Ssam#
14189251Ssam# DVIPS		A program which convert a TeX DVI file to PostScript [dvips]
15189251Ssam#
16189251Ssam# DVIPS2ASCII	A program to convert a PostScript file which was prior
17189251Ssam#		converted from a TeX DVI file to ascii/latin1 [dvips2ascii]
18189251Ssam#
19189251Ssam# FORMATS 	Indicates which output formats will be generated
20189251Ssam#               (info, dvi, latin1, ps, html).  [info]
21189251Ssam#
22189251Ssam# ICOMPRESS_CMD	Program to compress info files. Output is to
23189251Ssam#		stdout. [${COMPRESS_CMD}]
24189251Ssam#
25189251Ssam# INFO		texinfo files, without suffix.  [set in Makefile]
26189251Ssam#
27189251Ssam# INFO2HTML	A program for converting GNU info files into HTML files
28189251Ssam#		[info2html]
29189251Ssam#
30189251Ssam# INFODIR	Base path for GNU's hypertext system
31189251Ssam#		called Info (see info(1)). [${SHAREDIR}/info]
32189251Ssam#
33189251Ssam# INFODIRFILE	Top level node/index for info files. [dir]
34189251Ssam#
35189251Ssam# INFOGRP	Info group. [${SHAREGRP}]
36189251Ssam#
37189251Ssam# INFOMODE	Info mode. [${NOBINMODE}]
38189251Ssam#
39189251Ssam# INFOOWN	Info owner. [${SHAREOWN}]
40189251Ssam#
41189251Ssam# INFOSECTION	Default section (if one could not be found in
42189251Ssam#		the Info file). [Miscellaneous]
43189251Ssam#
44189251Ssam# INSTALLINFO	A program for installing directory entries from Info
45189251Ssam#		file in the ${INFODIR}/${INFODIRFILE}. [install-info]
46189251Ssam#
47189251Ssam# INSTALLINFOFLAGS	Options for ${INSTALLINFO} command. [--quiet]
48189251Ssam#
49189251Ssam# INSTALLINFODIRS	???
50189251Ssam#
51189251Ssam# MAKEINFO	A program for converting GNU Texinfo files into Info
52189251Ssam#		file. [makeinfo]
53189251Ssam#
54189251Ssam# MAKEINFOFLAGS		Options for ${MAKEINFO} command. [--no-split]
55189251Ssam#
56189251Ssam# NO_INFOCOMPRESS	If you do not want info files be
57189251Ssam#			compressed when they are installed. [not set]
58189251Ssam#
59189251Ssam# TEX		A program for converting tex files into dvi files [tex]
60189251Ssam#
61189251Ssam#
62189251Ssam# +++ targets +++
63189251Ssam#
64189251Ssam#	install:
65189251Ssam#		Install the info files.
66189251Ssam#
67189251Ssam#
68189251Ssam# bsd.obj.mk: cleandir and obj
69189251Ssam
70189251Ssam.include <bsd.init.mk>
71189251Ssam
72189251SsamMAKEINFO?=	makeinfo
73189251SsamMAKEINFOFLAGS+=	--no-split # simplify some things, e.g., compression
74189251SsamSRCDIR?=	${.CURDIR}
75189251SsamINFODIRFILE?=   dir
76189251SsamINSTALLINFO?=   install-info
77189251SsamINSTALLINFOFLAGS+=--quiet
78189251SsamINFOSECTION?=   Miscellaneous
79189251SsamICOMPRESS_CMD?=	${COMPRESS_CMD}
80189251SsamICOMPRESS_EXT?=	${COMPRESS_EXT}
81189251SsamFORMATS?=	info
82189251SsamINFO2HTML?=	info2html
83189251SsamTEX?=		tex
84189251SsamDVIPS?=		dvips
85189251SsamDVIPS2ASCII?=	dvips2ascii
86189251Ssam
87189251Ssam.SUFFIXES: ${ICOMPRESS_EXT} .info .texi .texinfo .dvi .ps .latin1 .html
88189251Ssam
89189251Ssam.texi.info .texinfo.info:
90189251Ssam	${MAKEINFO} ${MAKEINFOFLAGS} -I ${.CURDIR} -I ${SRCDIR} ${.IMPSRC} \
91189251Ssam		-o ${.TARGET}
92189251Ssam
93189251Ssam.texi.dvi .texinfo.dvi:
94189251Ssam	TEXINPUTS=${.CURDIR}:${SRCDIR}:$$TEXINPUTS \
95189251Ssam		${TEX} ${.IMPSRC} </dev/null
96189251Ssam# Run again to resolve cross references.
97189251Ssam	TEXINPUTS=${.CURDIR}:${SRCDIR}:$$TEXINPUTS \
98189251Ssam		${TEX} ${.IMPSRC} </dev/null
99189251Ssam
100189251Ssam.texinfo.latin1 .texi.latin1:
101189251Ssam	perl -npe 's/(^\s*\\input\s+texinfo\s+)/$$1\n@tex\n\\global\\hsize=120mm\n@end tex\n\n/' ${.IMPSRC} >> ${.IMPSRC:T:R}-la.texi
102189251Ssam	TEXINPUTS=${.CURDIR}:${SRCDIR}:$$TEXINPUTS \
103189251Ssam		${TEX} ${.IMPSRC:T:R}-la.texi </dev/null
104189251Ssam# Run again to resolve cross references.
105189251Ssam	TEXINPUTS=${.CURDIR}:${SRCDIR}:$$TEXINPUTS \
106189251Ssam		${TEX} ${.IMPSRC:T:R}-la.texi </dev/null
107189251Ssam	${DVIPS} -o /dev/stdout ${.IMPSRC:T:R}-la.dvi | \
108189251Ssam		${DVIPS2ASCII} > ${.TARGET}.new
109189251Ssam	mv -f ${.TARGET}.new ${.TARGET}
110189251Ssam
111189251Ssam.dvi.ps:
112189251Ssam	${DVIPS} -o ${.TARGET} ${.IMPSRC}
113189251Ssam
114189251Ssam.info.html:
115189251Ssam	${INFO2HTML} ${.IMPSRC}
116189251Ssam	${INSTALL_LINK} ${.TARGET:R}.info.Top.html ${.TARGET}
117189251Ssam
118189251Ssam.PATH: ${.CURDIR} ${SRCDIR}
119189251Ssam
120189251Ssam.for _f in ${FORMATS}
121189251SsamIFILENS+=	${INFO:S/$/.${_f}/}
122189251Ssam.endfor
123189251Ssam
124189251Ssam.if ${MK_INFO} != "no"
125189251SsamCLEANFILES+=	${IFILENS}
126189251Ssam.if !defined(NO_INFOCOMPRESS)
127189251SsamCLEANFILES+=	${IFILENS:S/$/${ICOMPRESS_EXT}/}
128189251SsamIFILES=	${IFILENS:S/$/${ICOMPRESS_EXT}/:S/.html${ICOMPRESS_EXT}/.html/}
129189251Ssamall: ${IFILES}
130189251Ssam.else
131189251SsamIFILES=	${IFILENS}
132189251Ssamall: ${IFILES}
133189251Ssam.endif
134189251Ssam.else
135189251Ssamall:
136189251Ssam.endif
137189251Ssam
138189251Ssam.for x in ${IFILENS}
139189251Ssam${x:S/$/${ICOMPRESS_EXT}/}:	${x}
140189251Ssam	${ICOMPRESS_CMD} ${.ALLSRC} > ${.TARGET}
141189251Ssam.endfor
142189251Ssam
143189251Ssam.for x in ${INFO}
144189251SsamINSTALLINFODIRS+= ${x:S/$/-install/}
145189251Ssam${x:S/$/-install/}:
146189251Ssam.if !empty(.MAKEFLAGS:M-j)
147189251Ssam	lockf -k ${DESTDIR}${INFODIR}/${INFODIRFILE} \
148189251Ssam	${INSTALLINFO} ${INSTALLINFOFLAGS} \
149189251Ssam	    --defsection=${INFOSECTION} \
150189251Ssam	    --defentry=${INFOENTRY_${x}} \
151189251Ssam	    ${x}.info ${DESTDIR}${INFODIR}/${INFODIRFILE}
152189251Ssam.else
153189251Ssam	${INSTALLINFO} ${INSTALLINFOFLAGS} \
154189251Ssam	    --defsection=${INFOSECTION} \
155189251Ssam	    --defentry=${INFOENTRY_${x}} \
156189251Ssam	    ${x}.info ${DESTDIR}${INFODIR}/${INFODIRFILE}
157189251Ssam.endif
158189251Ssam.endfor
159189251Ssam
160189251Ssam.PHONY: ${INSTALLINFODIRS}
161189251Ssam
162189251Ssam.if defined(SRCS)
163189251SsamCLEANFILES+=	${INFO}.texi
164189251Ssam${INFO}.texi: ${SRCS}
165189251Ssam	cat ${.ALLSRC} > ${.TARGET}
166189251Ssam.endif
167189251Ssam
168189251Ssam# tex garbage
169189251Ssam.if !empty(FORMATS:Mps) || !empty(FORMATS:Mdvi) || !empty(FORMATS:Mlatin1)
170189251Ssam.for _f in aux cp fn ky log out pg toc tp vr dvi
171189251SsamCLEANFILES+=	${INFO:S/$/.${_f}/} ${INFO:S/$/-la.${_f}/}
172189251Ssam.endfor
173189251SsamCLEANFILES+=	${INFO:S/$/-la.texi/}
174189251Ssam.endif
175189251Ssam
176189251Ssam.if !empty(FORMATS:Mhtml)
177189251SsamCLEANFILES+=	${INFO:S/$/.info.*.html/} ${INFO:S/$/.info/}
178189251Ssam.endif
179189251Ssam
180189251Ssam.if ${MK_INFO} != "no" && defined(INFO)
181189251Ssaminstall: ${INSTALLINFODIRS}
182189251Ssam.if !empty(IFILES:N*.html)
183189251Ssam	${INSTALL} -o ${INFOOWN} -g ${INFOGRP} -m ${INFOMODE} \
184189251Ssam		${IFILES:N*.html} ${DESTDIR}${INFODIR}
185189251Ssam.endif
186189251Ssam.if !empty(FORMATS:Mhtml)
187189251Ssam	${INSTALL} -o ${INFOOWN} -g ${INFOGRP} -m ${INFOMODE} \
188189251Ssam		${INFO:S/$/.info.*.html/} ${DESTDIR}${INFODIR}
189189251Ssam.endif
190189251Ssam.else
191189251Ssam# The indirection in the following is to avoid the null install rule
192189251Ssam# "install:" from being overridden by the implicit .sh rule if there
193189251Ssam# happens to be a source file named install.sh.  This assumes that there
194189251Ssam# is no source file named __null_install.sh.
195189251Ssaminstall: __null_install
196189251Ssam__null_install:
197189251Ssam.endif
198189251Ssam
199189251Ssam.include <bsd.obj.mk>
200189251Ssam