#
# Makefile for the Vim documentation on Unix
#
# If you get "don't know how to make scratch", first run make in the source
# directory.  Or remove the include below.

AWK = awk

VIMPROG = ../../src/vim

# include the config.mk from the source directory.  It's only needed to set
# AWK, used for "make html".  Comment this out if the include gives problems.
include ../../src/auto/config.mk

# Common components
include Make_all.mak

.SUFFIXES:
.SUFFIXES: .c .o .txt .html
.PHONY: all vimtags noerrors perlhtml clean test_urls

all: tags vim.man evim.man vimdiff.man vimtutor.man xxd.man $(CONVERTED)

# Use Vim to generate the tags file.  Can only be used when Vim has been
# compiled.  Supports multiple languages.
vimtags: $(DOCS)
	@$(VIMPROG) --clean -esX -V1 -u doctags.vim

# Use "doctags" to generate the tags file.  Only works for English!
tags: doctags $(DOCS)
	./doctags $(DOCS) | LANG=C LC_ALL=C sort >$@
	uniq -d -2 tags

doctags: doctags.c
	$(CC) doctags.c -o doctags

vim.man: vim.1
	nroff -man $? | sed -e s/.//g > $@

evim.man: evim.1
	nroff -man $? | sed -e s/.//g > $@

vimdiff.man: vimdiff.1
	nroff -man $? | sed -e s/.//g > $@

vimtutor.man: vimtutor.1
	nroff -man $? | sed -e s/.//g > $@

xxd.man: xxd.1
	nroff -man $? | sed -e s/.//g > $@

uganda.nsis.txt : uganda.???
	for dpn in $?; do \
	  trg=$@; \
          sed -e 's/[ 	]*\*.*\*//g' -e 's/vim:tw=[[:digit:]][[:digit:]]:.*//' \
            $${dpn} | uniq > $${trg%txt}$${dpn##*.}; \
	done
# This files needs to be in dos fileformat for NSIS.
	$(VIMPROG) -e -X -u NONE --cmd "set notitle noicon nocp noml viminfo=" \
	  -c "argdo write ++ff=dos" -c "qa" uganda.nsis.???

# Awk version of .txt to .html conversion.
html: noerrors tags $(HTMLS)
	@if test -f errors.log; then more errors.log; fi

noerrors:
	-rm -f errors.log

$(HTMLS): tags.ref

.txt.html:
	$(AWK) -f makehtml.awk $< >$@

# index.html is the starting point for HTML, but for the help files it is
# help.txt.  Therefore use vimindex.html for index.txt.
index.html: help.txt
	$(AWK) -f makehtml.awk $? >$@

vimindex.html: index.txt
	$(AWK) -f makehtml.awk $? >$@

tags.ref tags.html: tags
	$(AWK) -f maketags.awk tags >tags.html

# Perl version of .txt to .html conversion.
# There can't be two rules to produce a .html from a .txt file.
# Just run over all .txt files each time one changes.  It's fast anyway.
perlhtml: tags $(DOCS)
	./vim2html.pl tags $(DOCS)

# Check URLs in the help with "curl".
test_urls:
	$(VIMPROG) --clean -S test_urls.vim

clean:
	-rm -f doctags *.html tags.ref

# These files are in the extra archive, skip if not present

arabic.txt:
	touch $@

farsi.txt:
	touch $@

hebrew.txt:
	touch $@

russian.txt:
	touch $@

gui_w32.txt:
	touch $@

if_ole.txt:
	touch $@

os_390.txt:
	touch $@

os_amiga.txt:
	touch $@

os_beos.txt:
	touch $@

os_dos.txt:
	touch $@

os_haiku.txt:
	touch $@

os_mac.txt:
	touch $@

os_mint.txt:
	touch $@

os_msdos.txt:
	touch $@

os_os2.txt:
	touch $@

os_qnx.txt:
	touch $@

os_risc.txt:
	touch $@

os_win32.txt:
	touch $@

# In *BSD, the variable '$<' is used in suffix-transformation rules (in GNU this
# is called "implicit rules", and in MS Windows it is called "inference rules").
# For code portability, it is better to use the '$?' variable for explicit rules.
# Especially since there is only one dependency and it should presumably always
# be newer than the target file.
vim-da.UTF-8.1: vim-da.1
	iconv -f latin1 -t UTF-8 $? >$@

vimdiff-da.UTF-8.1: vimdiff-da.1
	iconv -f latin1 -t UTF-8 $? >$@

vimtutor-da.UTF-8.1: vimtutor-da.1
	iconv -f latin1 -t UTF-8 $? >$@

vim-de.UTF-8.1: vim-de.1
	iconv -f latin1 -t UTF-8 $? >$@

vim-fr.UTF-8.1: vim-fr.1
	iconv -f latin1 -t UTF-8 $? >$@

evim-fr.UTF-8.1: evim-fr.1
	iconv -f latin1 -t UTF-8 $? >$@

vimdiff-fr.UTF-8.1: vimdiff-fr.1
	iconv -f latin1 -t UTF-8 $? >$@

vimtutor-fr.UTF-8.1: vimtutor-fr.1
	iconv -f latin1 -t UTF-8 $? >$@

xxd-fr.UTF-8.1: xxd-fr.1
	iconv -f latin1 -t UTF-8 $? >$@

vim-it.UTF-8.1: vim-it.1
	iconv -f latin1 -t UTF-8 $? >$@

evim-it.UTF-8.1: evim-it.1
	iconv -f latin1 -t UTF-8 $? >$@

vimdiff-it.UTF-8.1: vimdiff-it.1
	iconv -f latin1 -t UTF-8 $? >$@

vimtutor-it.UTF-8.1: vimtutor-it.1
	iconv -f latin1 -t UTF-8 $? >$@

xxd-it.UTF-8.1: xxd-it.1
	iconv -f latin1 -t UTF-8 $? >$@

vim-pl.UTF-8.1: vim-pl.1
	iconv -f latin2 -t UTF-8 $? >$@

evim-pl.UTF-8.1: evim-pl.1
	iconv -f latin2 -t UTF-8 $? >$@

vimdiff-pl.UTF-8.1: vimdiff-pl.1
	iconv -f latin2 -t UTF-8 $? >$@

vimtutor-pl.UTF-8.1: vimtutor-pl.1
	iconv -f latin2 -t UTF-8 $? >$@

xxd-pl.UTF-8.1: xxd-pl.1
	iconv -f latin2 -t UTF-8 $? >$@

vim-ru.UTF-8.1: vim-ru.1
	iconv -f KOI8-R -t UTF-8 $? >$@

evim-ru.UTF-8.1: evim-ru.1
	iconv -f KOI8-R -t UTF-8 $? >$@

vimdiff-ru.UTF-8.1: vimdiff-ru.1
	iconv -f KOI8-R -t UTF-8 $? >$@

vimtutor-ru.UTF-8.1: vimtutor-ru.1
	iconv -f KOI8-R -t UTF-8 $? >$@

xxd-ru.UTF-8.1: xxd-ru.1
	iconv -f KOI8-R -t UTF-8 $? >$@

vim-tr.UTF-8.1: vim-tr.1
	iconv -f latin5 -t UTF-8 $? >$@

evim-tr.UTF-8.1: evim-tr.1
	iconv -f latin5 -t UTF-8 $? >$@

vimdiff-tr.UTF-8.1: vimdiff-tr.1
	iconv -f latin5 -t UTF-8 $? >$@

vimtutor-tr.UTF-8.1: vimtutor-tr.1
	iconv -f latin5 -t UTF-8 $? >$@
