##Copyright (C) 1991, 1992, 1999 Free Software Foundation, Inc.

# Makefile for GDB documentation.
# This file is part of GDB.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

srcdir = @srcdir@
VPATH = @srcdir@

prefix = @prefix@

infodir = @infodir@
htmldir = $(prefix)/html

SHELL = @SHELL@

INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@

# main GDB source directory
gdbdir = $(srcdir)/..

# where to find texinfo; GDB dist should include a recent one
TEXIDIR=${gdbdir}/../texinfo

# where to find makeinfo, preferably one designed for texinfo-2
MAKEINFO=makeinfo

MAKEHTML = texi2html
MAKEHTMLFLAGS = -glossary -menu -split_chapter

# where to find texi2roff, ditto
TEXI2ROFF=texi2roff

# Where is the source dir for the READLINE library doc?  
# Traditionally readline is in .. or .
READLINE_DIR = ${gdbdir}/../readline/doc

SET_TEXINPUTS = TEXINPUTS=${TEXIDIR}:.:$(srcdir):$(READLINE_DIR):$$TEXINPUTS

# There may be alternate predefined collections of switches to configure
# the GDB manual.  Normally this is not done in synch with the software
# config system, since this choice tends to be independent; most people
# want a doc config of `all' for a generic manual, regardless of sw config.
DOC_CONFIG = all

# This list of sed edits will edit the GDB reference card
# for what fonts and what papersize to use.
# By default (NO edits applied), the refcard uses:
#    - Computer Modern (CM) fonts
#    - US letter paper (8.5x11in)
# List some of the following files for alternative fonts and paper:
#  a4rc.sed     use A4 paper (297 x 210 mm)
#  psrc.sed     use PostScript fonts (Karl Berry short TeX names)
# lpsrc.sed     use PostScript fonts (full PostScript names in TeX)
# e.g. for A4, Postscript:  REFEDITS = a4rc.sed psrc.sed
#      for A4, CM fonts:    REFEDITS = a4rc.sed
#      for US, PS fonts:    REFEDITS = psrc.sed
#      for default:
REFEDITS =

# Don Knuth's TeX formatter
TEX = tex

# auxiliary program for sorting Texinfo indices
TEXINDEX = texindex

# Program to generate Postscript files from DVI files.
DVIPS = dvips

# Main GDB manual's source files
SFILES_INCLUDED = gdb-cfg.texi

SFILES_LOCAL = $(srcdir)/gdb.texinfo GDBvn.texi $(SFILES_INCLUDED)

SFILES_DOC = $(SFILES_LOCAL) \
                $(READLINE_DIR)/rluser.texinfo $(READLINE_DIR)/inc-hist.texinfo

#### Host, target, and site specific Makefile fragments come in here.
###

all install:

info: gdb.info gdbint.info stabs.info
dvi: gdb.dvi gdbint.dvi stabs.dvi refcard.dvi
ps: gdb.ps gdbint.ps stabs.ps refcard.ps
html: gdb_toc.html gdbint_toc.html stabs_toc.html
all-doc: info dvi ps

install-info: info
	for i in *.info* ; do \
		$(INSTALL_DATA) $$i $(infodir)/$$i ; \
	done

install-html: html
	for i in *.html ; do \
		$(INSTALL_DATA) $$i $(htmldir)/$$i ; \
	done

STAGESTUFF = *.info* gdb-all.texi GDBvn.texi *.ps *.dvi

# Copy the object files from a particular stage into a subdirectory.
stage1: force
	-mkdir stage1
	-mv $(STAGESTUFF) stage1

stage2: force
	-mkdir stage2
	-mv $(STAGESTUFF) stage2

stage3: force
	-mkdir stage3
	-mv $(STAGESTUFF) stage3

against=stage2

comparison: force
	for i in $(STAGESTUFF) ; do cmp $$i $(against)/$$i ; done

de-stage1: force
	-(cd stage1 ; mv -f * ..)
	-rmdir stage1

de-stage2: force
	-(cd stage2 ; mv -f * ..)
	-rmdir stage2

de-stage3: force
	-(cd stage3 ; mv -f * ..)
	-rmdir stage3

# The "least clean" level of cleaning.  Get rid of files which are
# automatically generated files that are just intermediate files,
# 
mostlyclean:
	rm -f gdb.mm gdb.ms gdb.me links2roff
	rm -f *.aux *.cp* *.fn* *.ky* *.log *.pg* *.toc *.tp* *.vr*
	rm -f sedref.dvi sedref.tex tmp.sed

clean: mostlyclean
	rm -f rluser.texinfo inc-hist.texinfo gdb-cfg.texi

distclean: clean
	rm -f Makefile config.status

# GDBvn.texi, the dvi files, the info files, and the postscript files, 
# are all part of the distribution, so it should not be removed by
# "clean" or "distclean".  Use maintainer-clean to remove them.

maintainer-clean realclean: distclean
	rm -f GDBvn.texi *.info* *.dvi *.ps *.html

# GDB QUICK REFERENCE (dvi output)
refcard.dvi : refcard.tex $(REFEDITS)
	if [ -z "$(REFEDITS)" ]; then \
		cp $(srcdir)/refcard.tex sedref.tex ; \
	else \
		echo > tmp.sed ; \
		for f in "$(REFEDITS)" ; do \
			cat $(srcdir)/$$f >>tmp.sed ; done ; \
		sed -f tmp.sed $(srcdir)/refcard.tex >sedref.tex ; \
	fi
	$(SET_TEXINPUTS) $(TEX) sedref.tex
	mv sedref.dvi refcard.dvi
	rm -f sedref.log sedref.tex tmp.sed

refcard.ps : refcard.dvi
	$(DVIPS) -t landscape -o $@ $?

# File to record current GDB version number (copied from main dir Makefile.in)
GDBvn.texi : ${gdbdir}/Makefile.in
	echo "@set GDBVN `sed <$(srcdir)/../Makefile.in -n 's/^VERSION *= *//p'`" > ./GDBvn.new
	mv GDBvn.new GDBvn.texi

# Updated atomically
.PRECIOUS: GDBvn.texi

# Choose configuration for GDB manual (normally `all'; normally not tied into
# `configure' script because most users prefer generic version of manual,
# not one for their binary config---which may not be specifically
# defined anyways).
gdb-cfg.texi: ${srcdir}/${DOC_CONFIG}-cfg.texi
	ln -s ${srcdir}/${DOC_CONFIG}-cfg.texi gdb-cfg.texi || \
	ln ${srcdir}/${DOC_CONFIG}-cfg.texi gdb-cfg.texi || \
	cp ${srcdir}/${DOC_CONFIG}-cfg.texi gdb-cfg.texi

# GDB MANUAL: texinfo source, using @set/@clear/@value/@ifset/@ifclear
# If your texinfo or makeinfo don't support these, get a new texinfo release
#
# The nonsense with GDBvn.texi gets this to run with both Sun and GNU make.
#   Note that we can *generate* GDBvn.texi, but since we distribute one in the
#   source directory for the benefit of people who *don't* use this makefile,
#   VPATH will often tell make not to bother building it, because the one
#   in the srcdir is up to date.  (if not, then make should build one here).

# GDB MANUAL: TeX dvi file
gdb.dvi: ${SFILES_DOC}
	if [ ! -f ./GDBvn.texi ]; then \
		ln -s $(srcdir)/GDBvn.texi . || \
		ln $(srcdir)/GDBvn.texi . || \
		cp $(srcdir)/GDBvn.texi . ; else true; fi
	$(SET_TEXINPUTS) $(TEX) gdb.texinfo
	$(SET_TEXINPUTS) $(TEX) gdb.texinfo
	$(TEXINDEX) gdb.??
	$(SET_TEXINPUTS) $(TEX) gdb.texinfo
	rm -f gdb.aux gdb.cp* gdb.fn* gdb.ky* gdb.log gdb.pg* gdb.toc \
		gdb.tp* gdb.vr*

gdb.ps: gdb.dvi
	$(DVIPS) -o $@ $?

# GDB MANUAL: info file
# We're using texinfo2, and older makeinfo's may not be able to
# cope with all the markup.  
gdb.info: ${SFILES_DOC}
	$(MAKEINFO) -I ${READLINE_DIR} -I $(srcdir) -o ./gdb.info gdb.texinfo

# GDB MANUAL: roff translations
# Try to use a recent texi2roff.  v2 was put on prep in jan91.
# If you want an index, see texi2roff doc for postprocessing 
# and add -i to texi2roff invocations below.
# Workarounds for texi2roff-2 (probably fixed in later texi2roff's, delete
#    corresponding -e lines when later texi2roff's are current)
# + @ifinfo's deleted explicitly due to texi2roff-2 bug w nested constructs.
# + @c's deleted explicitly because texi2roff sees texinfo commands in them
# + @   (that's at-BLANK) not recognized by texi2roff, turned into blank
# + @alphaenumerate is ridiculously new, turned into @enumerate

# texi2roff doesn't have a notion of include dirs, so we have to fake 
# it out for gdb manual's include files---but only if not configured
# in main sourcedir.
links2roff: $(SFILES_INCLUDED)
	if [ ! -f gdb.texinfo ]; then \
		ln -s $(SFILES_INCLUDED) . || \
		ln $(SFILES_INCLUDED)    . || \
		cp $(SFILES_INCLUDED)    . ; \
	fi
	touch links2roff

#  "Readline" appendices.  Get them also due to lack of includes, 
# regardless of whether or not configuring in main sourcedir.
# @ftable removed due to bug in texi2roff-2; if your texi2roff
# is newer, try just ln or cp
rluser.texinfo: ${READLINE_DIR}/rluser.texinfo
		sed -e 's/^@ftable/@table/g' \
		-e 's/^@end ftable/@end table/g' \
		${READLINE_DIR}/rluser.texinfo > ./rluser.texinfo

inc-hist.texinfo: ${READLINE_DIR}/inc-hist.texinfo
	ln -s ${READLINE_DIR}/inc-hist.texinfo . || \
	ln ${READLINE_DIR}/inc-hist.texinfo . || \
	cp ${READLINE_DIR}/inc-hist.texinfo .

# gdb manual suitable for [gtn]roff -me
gdb.me: $(SFILES_LOCAL) links2roff rluser.texinfo inc-hist.texinfo
	sed -e '/\\input texinfo/d' \
		-e '/@c TEXI2ROFF-KILL/,/@c END TEXI2ROFF-KILL/d' \
		-e '/^@ifinfo/,/^@end ifinfo/d' \
		-e '/^@c /d' \
		-e 's/{.*,,/{/' \
		-e 's/@ / /g' \
		-e 's/^@alphaenumerate/@enumerate/g' \
		-e 's/^@end alphaenumerate/@end enumerate/g' \
		$(srcdir)/gdb.texinfo | \
	$(TEXI2ROFF) -me | \
	sed -e 's/---/\\(em/g' \
	>gdb.me 

# gdb manual suitable for [gtn]roff -ms
gdb.ms: $(SFILES_LOCAL) links2roff rluser.texinfo inc-hist.texinfo
	sed -e '/\\input texinfo/d' \
		-e '/@c TEXI2ROFF-KILL/,/@c END TEXI2ROFF-KILL/d' \
		-e '/^@ifinfo/,/^@end ifinfo/d' \
		-e '/^@c /d' \
		-e 's/{.*,,/{/' \
		-e 's/@ / /g' \
		-e 's/^@alphaenumerate/@enumerate/g' \
		-e 's/^@end alphaenumerate/@end enumerate/g' \
		$(srcdir)/gdb.texinfo | \
	$(TEXI2ROFF) -ms | \
	sed -e 's/---/\\(em/g' \
	>gdb.ms 

# gdb manual suitable for [tn]roff -mm
# '@noindent's removed due to texi2roff-2 mm bug; if yours is newer, 
#   try leaving them in
gdb.mm: $(SFILES_LOCAL) links2roff rluser.texinfo inc-hist.texinfo
	sed -e '/\\input texinfo/d' \
		-e '/@c TEXI2ROFF-KILL/,/@c END TEXI2ROFF-KILL/d' \
		-e '/^@ifinfo/,/^@end ifinfo/d' \
		-e '/^@c /d' \
		-e 's/{.*,,/{/' \
		-e '/@noindent/d' \
		-e 's/@ / /g' \
		-e 's/^@alphaenumerate/@enumerate/g' \
		-e 's/^@end alphaenumerate/@end enumerate/g' \
		$(srcdir)/gdb.texinfo | \
	$(TEXI2ROFF) -mm | \
	sed -e 's/---/\\(em/g' \
	>gdb.mm 

# GDB MANUAL: HTML file

gdb_toc.html: ${SFILES_DOC}
	$(MAKEHTML) $(MAKEHTMLFLAGS) -I ${READLINE_DIR} -I $(srcdir) $(srcdir)/gdb.texinfo


# GDB INTERNALS MANUAL: TeX dvi file
gdbint.dvi : gdbint.texinfo
	$(SET_TEXINPUTS) $(TEX) gdbint.texinfo
	$(TEXINDEX) gdbint.??
	$(SET_TEXINPUTS) $(TEX) gdbint.texinfo
	rm -f gdbint.aux gdbint.cp* gdbint.fn* gdbint.ky* \
		gdbint.log gdbint.pg* gdbint.toc gdbint.tp* gdbint.vr*

gdbint.ps : gdbint.dvi
	$(DVIPS) -o $@ $?

# GDB INTERNALS MANUAL: info file

gdbint.info: gdbint.texinfo
	$(MAKEINFO) -o gdbint.info $(srcdir)/gdbint.texinfo

# GDB INTERNALS MANUAL: HTML file

gdbint_toc.html: gdbint.texinfo
	$(MAKEHTML) $(MAKEHTMLFLAGS) $(srcdir)/gdbint.texinfo

stabs.info: stabs.texinfo
	$(MAKEINFO) -o stabs.info $(srcdir)/stabs.texinfo

# STABS DOCUMENTATION: HTML file

stabs_toc.html: stabs.texinfo
	$(MAKEHTML) $(MAKEHTMLFLAGS) $(srcdir)/stabs.texinfo

# STABS DOCUMENTATION: TeX dvi file
stabs.dvi : stabs.texinfo
	$(SET_TEXINPUTS) $(TEX) stabs.texinfo
	$(TEXINDEX) stabs.??
	$(SET_TEXINPUTS) $(TEX) stabs.texinfo
	rm -f stabs.aux stabs.cp* stabs.fn* stabs.ky* \
		stabs.log stabs.pg* stabs.toc stabs.tp* stabs.vr*

stabs.ps: stabs.dvi
	$(DVIPS) -o $@ $?

force:

Makefile: Makefile.in $(host_makefile_frag) $(target_makefile_frag) config.status
	$(SHELL) ./config.status
