TOPSRCDIR = @top_srcdir@
TOPOBJDIR = ..
SRCDIR    = @srcdir@
VPATH     = @srcdir@
MODULE    = none
BOOKNAME  = wine-doc

EXTRASUBDIRS = samples status

BOOK_SRCS = \
	architecture.sgml \
	bugs.sgml \
	build.sgml \
	compiling.sgml \
	configuring.sgml \
	consoles.sgml \
	debugger.sgml \
	debugging.sgml \
	dlls.sgml \
	documentation.sgml \
	fonts.sgml \
	i18n.sgml \
	implementation.sgml \
	installing.sgml \
	opengl.sgml \
	packaging.sgml \
	patches.sgml \
	porting.sgml \
	printing.sgml \
	registry.sgml \
	running.sgml \
	tools.sgml \
	wine-doc.sgml

BOOK_TARGETS = \
	$(BOOKNAME)/index.html \
	$(BOOKNAME).pdf \
	$(BOOKNAME).ps

all: $(BOOK_TARGETS)

@MAKE_RULES@

$(BOOKNAME)/index.html: $(BOOK_SRCS)
	db2html $(BOOKNAME).sgml

$(BOOKNAME).pdf: $(BOOK_SRCS)
	db2pdf $(BOOKNAME).sgml

$(BOOKNAME).ps: $(BOOK_SRCS)
	db2ps $(BOOKNAME).sgml

install:: 
	$(INSTALL) -d $(mandir)/man$(prog_manext)
	$(INSTALL) -d $(mandir)/man$(conf_manext)
	sed -e 's|$${prefix}|$(prefix)|g' < wine.man > wine.man.tmp && mv wine.man.tmp wine.man
	$(INSTALL_DATA) wine.man $(mandir)/man$(prog_manext)/wine.$(prog_manext)
	$(INSTALL_DATA) $(SRCDIR)/winemaker.man $(mandir)/man$(prog_manext)/winemaker.$(prog_manext)
	sed -e 's|$${prefix}|$(prefix)|g' < wine.conf.man > wine.conf.man.tmp && mv wine.conf.man.tmp wine.conf.man
	$(INSTALL_DATA) wine.conf.man $(mandir)/man$(conf_manext)/wine.conf.$(conf_manext)

uninstall::
	$(RM) $(mandir)/man$(prog_manext)/wine.$(prog_manext)
	$(RM) $(mandir)/man$(prog_manext)/winemaker.$(prog_manext)
	$(RM) $(mandir)/man$(conf_manext)/wine.conf.$(conf_manext)

clean::
	$(RM) *.aux *.dvi *.tex *.log $(BOOKNAME).pdf $(BOOKNAME).ps
	$(RM) -r $(BOOKNAME) html man3w *.junk DBTOHTML_OUTPUT_DIR*

### Dependencies:
