| # Guard against environment variables |
| MAN1_TXT = |
| MAN5_TXT = |
| MAN7_TXT = |
| TECH_DOCS = |
| ARTICLES = |
| SP_ARTICLES = |
| OBSOLETE_HTML = |
| |
| MAN1_TXT += $(filter-out \ |
| $(addsuffix .txt, $(ARTICLES) $(SP_ARTICLES)), \ |
| $(wildcard git-*.txt)) |
| MAN1_TXT += git.txt |
| MAN1_TXT += gitk.txt |
| MAN1_TXT += gitremote-helpers.txt |
| MAN1_TXT += gitweb.txt |
| |
| MAN5_TXT += gitattributes.txt |
| MAN5_TXT += githooks.txt |
| MAN5_TXT += gitignore.txt |
| MAN5_TXT += gitmodules.txt |
| MAN5_TXT += gitrepository-layout.txt |
| MAN5_TXT += gitweb.conf.txt |
| |
| MAN7_TXT += gitcli.txt |
| MAN7_TXT += gitcore-tutorial.txt |
| MAN7_TXT += gitcredentials.txt |
| MAN7_TXT += gitcvs-migration.txt |
| MAN7_TXT += gitdiffcore.txt |
| MAN7_TXT += giteveryday.txt |
| MAN7_TXT += gitglossary.txt |
| MAN7_TXT += gitnamespaces.txt |
| MAN7_TXT += gitrevisions.txt |
| MAN7_TXT += gitsubmodules.txt |
| MAN7_TXT += gittutorial-2.txt |
| MAN7_TXT += gittutorial.txt |
| MAN7_TXT += gitworkflows.txt |
| |
| MAN_TXT = $(MAN1_TXT) $(MAN5_TXT) $(MAN7_TXT) |
| MAN_XML = $(patsubst %.txt,%.xml,$(MAN_TXT)) |
| MAN_HTML = $(patsubst %.txt,%.html,$(MAN_TXT)) |
| |
| OBSOLETE_HTML += everyday.html |
| OBSOLETE_HTML += git-remote-helpers.html |
| DOC_HTML = $(MAN_HTML) $(OBSOLETE_HTML) |
| |
| ARTICLES += howto-index |
| ARTICLES += git-tools |
| ARTICLES += git-bisect-lk2009 |
| # with their own formatting rules. |
| SP_ARTICLES += user-manual |
| SP_ARTICLES += howto/new-command |
| SP_ARTICLES += howto/revert-branch-rebase |
| SP_ARTICLES += howto/using-merge-subtree |
| SP_ARTICLES += howto/using-signed-tag-in-pull-request |
| SP_ARTICLES += howto/use-git-daemon |
| SP_ARTICLES += howto/update-hook-example |
| SP_ARTICLES += howto/setup-git-server-over-http |
| SP_ARTICLES += howto/separating-topic-branches |
| SP_ARTICLES += howto/revert-a-faulty-merge |
| SP_ARTICLES += howto/recover-corrupted-blob-object |
| SP_ARTICLES += howto/recover-corrupted-object-harder |
| SP_ARTICLES += howto/rebuild-from-update-hook |
| SP_ARTICLES += howto/rebase-from-internal-branch |
| SP_ARTICLES += howto/keep-canonical-history-correct |
| SP_ARTICLES += howto/maintain-git |
| API_DOCS = $(patsubst %.txt,%,$(filter-out technical/api-index-skel.txt technical/api-index.txt, $(wildcard technical/api-*.txt))) |
| SP_ARTICLES += $(API_DOCS) |
| |
| TECH_DOCS += technical/hash-function-transition |
| TECH_DOCS += technical/http-protocol |
| TECH_DOCS += technical/index-format |
| TECH_DOCS += technical/pack-format |
| TECH_DOCS += technical/pack-heuristics |
| TECH_DOCS += technical/pack-protocol |
| TECH_DOCS += technical/protocol-capabilities |
| TECH_DOCS += technical/protocol-common |
| TECH_DOCS += technical/racy-git |
| TECH_DOCS += technical/send-pack-pipeline |
| TECH_DOCS += technical/shallow |
| TECH_DOCS += technical/signature-format |
| TECH_DOCS += technical/trivial-merge |
| SP_ARTICLES += $(TECH_DOCS) |
| SP_ARTICLES += technical/api-index |
| |
| DOC_HTML += $(patsubst %,%.html,$(ARTICLES) $(SP_ARTICLES)) |
| |
| DOC_MAN1 = $(patsubst %.txt,%.1,$(MAN1_TXT)) |
| DOC_MAN5 = $(patsubst %.txt,%.5,$(MAN5_TXT)) |
| DOC_MAN7 = $(patsubst %.txt,%.7,$(MAN7_TXT)) |
| |
| prefix ?= $(HOME) |
| bindir ?= $(prefix)/bin |
| htmldir ?= $(prefix)/share/doc/git-doc |
| infodir ?= $(prefix)/share/info |
| pdfdir ?= $(prefix)/share/doc/git-doc |
| mandir ?= $(prefix)/share/man |
| man1dir = $(mandir)/man1 |
| man5dir = $(mandir)/man5 |
| man7dir = $(mandir)/man7 |
| # DESTDIR = |
| |
| ASCIIDOC = asciidoc |
| ASCIIDOC_EXTRA = |
| ASCIIDOC_HTML = xhtml11 |
| ASCIIDOC_DOCBOOK = docbook |
| ASCIIDOC_CONF = -f asciidoc.conf |
| ASCIIDOC_COMMON = $(ASCIIDOC) $(ASCIIDOC_EXTRA) $(ASCIIDOC_CONF) \ |
| -agit_version=$(GIT_VERSION) |
| TXT_TO_HTML = $(ASCIIDOC_COMMON) -b $(ASCIIDOC_HTML) |
| TXT_TO_XML = $(ASCIIDOC_COMMON) -b $(ASCIIDOC_DOCBOOK) |
| MANPAGE_XSL = manpage-normal.xsl |
| XMLTO = xmlto |
| XMLTO_EXTRA = |
| INSTALL ?= install |
| RM ?= rm -f |
| MAN_REPO = ../../git-manpages |
| HTML_REPO = ../../git-htmldocs |
| |
| MAKEINFO = makeinfo |
| INSTALL_INFO = install-info |
| DOCBOOK2X_TEXI = docbook2x-texi |
| DBLATEX = dblatex |
| ASCIIDOC_DBLATEX_DIR = /etc/asciidoc/dblatex |
| DBLATEX_COMMON = -p $(ASCIIDOC_DBLATEX_DIR)/asciidoc-dblatex.xsl -s $(ASCIIDOC_DBLATEX_DIR)/asciidoc-dblatex.sty |
| ifndef PERL_PATH |
| PERL_PATH = /usr/bin/perl |
| endif |
| |
| -include ../config.mak.autogen |
| -include ../config.mak |
| |
| # |
| # For docbook-xsl ... |
| # -1.68.1, no extra settings are needed? |
| # 1.69.0, set ASCIIDOC_ROFF? |
| # 1.69.1-1.71.0, set DOCBOOK_SUPPRESS_SP? |
| # 1.71.1, set ASCIIDOC_ROFF? |
| # 1.72.0, set DOCBOOK_XSL_172. |
| # 1.73.0-, no extra settings are needed |
| # |
| |
| ifdef DOCBOOK_XSL_172 |
| ASCIIDOC_EXTRA += -a git-asciidoc-no-roff |
| MANPAGE_XSL = manpage-1.72.xsl |
| else |
| ifndef ASCIIDOC_ROFF |
| # docbook-xsl after 1.72 needs the regular XSL, but will not |
| # pass-thru raw roff codes from asciidoc.conf, so turn them off. |
| ASCIIDOC_EXTRA += -a git-asciidoc-no-roff |
| endif |
| endif |
| ifndef NO_MAN_BOLD_LITERAL |
| XMLTO_EXTRA += -m manpage-bold-literal.xsl |
| endif |
| ifdef DOCBOOK_SUPPRESS_SP |
| XMLTO_EXTRA += -m manpage-suppress-sp.xsl |
| endif |
| |
| # Newer DocBook stylesheet emits warning cruft in the output when |
| # this is not set, and if set it shows an absolute link. Older |
| # stylesheets simply ignore this parameter. |
| # |
| # Distros may want to use MAN_BASE_URL=file:///path/to/git/docs/ |
| # or similar. |
| ifndef MAN_BASE_URL |
| MAN_BASE_URL = file://$(htmldir)/ |
| endif |
| XMLTO_EXTRA += -m manpage-base-url.xsl |
| |
| # If your target system uses GNU groff, it may try to render |
| # apostrophes as a "pretty" apostrophe using unicode. This breaks |
| # cut&paste, so you should set GNU_ROFF to force them to be ASCII |
| # apostrophes. Unfortunately does not work with non-GNU roff. |
| ifdef GNU_ROFF |
| XMLTO_EXTRA += -m manpage-quote-apos.xsl |
| endif |
| |
| ifdef USE_ASCIIDOCTOR |
| ASCIIDOC = asciidoctor |
| ASCIIDOC_CONF = |
| ASCIIDOC_HTML = xhtml5 |
| ASCIIDOC_DOCBOOK = docbook45 |
| ASCIIDOC_EXTRA += -I. -rasciidoctor-extensions |
| ASCIIDOC_EXTRA += -alitdd='&\#x2d;&\#x2d;' |
| DBLATEX_COMMON = |
| endif |
| |
| SHELL_PATH ?= $(SHELL) |
| # Shell quote; |
| SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH)) |
| |
| ifdef DEFAULT_PAGER |
| DEFAULT_PAGER_SQ = $(subst ','\'',$(DEFAULT_PAGER)) |
| ASCIIDOC_EXTRA += -a 'git-default-pager=$(DEFAULT_PAGER_SQ)' |
| endif |
| |
| ifdef DEFAULT_EDITOR |
| DEFAULT_EDITOR_SQ = $(subst ','\'',$(DEFAULT_EDITOR)) |
| ASCIIDOC_EXTRA += -a 'git-default-editor=$(DEFAULT_EDITOR_SQ)' |
| endif |
| |
| QUIET_SUBDIR0 = +$(MAKE) -C # space to separate -C and subdir |
| QUIET_SUBDIR1 = |
| |
| ifneq ($(findstring $(MAKEFLAGS),w),w) |
| PRINT_DIR = --no-print-directory |
| else # "make -w" |
| NO_SUBDIR = : |
| endif |
| |
| ifneq ($(findstring $(MAKEFLAGS),s),s) |
| ifndef V |
| QUIET_ASCIIDOC = @echo ' ' ASCIIDOC $@; |
| QUIET_XMLTO = @echo ' ' XMLTO $@; |
| QUIET_DB2TEXI = @echo ' ' DB2TEXI $@; |
| QUIET_MAKEINFO = @echo ' ' MAKEINFO $@; |
| QUIET_DBLATEX = @echo ' ' DBLATEX $@; |
| QUIET_XSLTPROC = @echo ' ' XSLTPROC $@; |
| QUIET_GEN = @echo ' ' GEN $@; |
| QUIET_LINT = @echo ' ' LINT $@; |
| QUIET_STDERR = 2> /dev/null |
| QUIET_SUBDIR0 = +@subdir= |
| QUIET_SUBDIR1 = ;$(NO_SUBDIR) echo ' ' SUBDIR $$subdir; \ |
| $(MAKE) $(PRINT_DIR) -C $$subdir |
| export V |
| endif |
| endif |
| |
| all: html man |
| |
| html: $(DOC_HTML) |
| |
| man: man1 man5 man7 |
| man1: $(DOC_MAN1) |
| man5: $(DOC_MAN5) |
| man7: $(DOC_MAN7) |
| |
| info: git.info gitman.info |
| |
| pdf: user-manual.pdf |
| |
| install: install-man |
| |
| install-man: man |
| $(INSTALL) -d -m 755 $(DESTDIR)$(man1dir) |
| $(INSTALL) -d -m 755 $(DESTDIR)$(man5dir) |
| $(INSTALL) -d -m 755 $(DESTDIR)$(man7dir) |
| $(INSTALL) -m 644 $(DOC_MAN1) $(DESTDIR)$(man1dir) |
| $(INSTALL) -m 644 $(DOC_MAN5) $(DESTDIR)$(man5dir) |
| $(INSTALL) -m 644 $(DOC_MAN7) $(DESTDIR)$(man7dir) |
| |
| install-info: info |
| $(INSTALL) -d -m 755 $(DESTDIR)$(infodir) |
| $(INSTALL) -m 644 git.info gitman.info $(DESTDIR)$(infodir) |
| if test -r $(DESTDIR)$(infodir)/dir; then \ |
| $(INSTALL_INFO) --info-dir=$(DESTDIR)$(infodir) git.info ;\ |
| $(INSTALL_INFO) --info-dir=$(DESTDIR)$(infodir) gitman.info ;\ |
| else \ |
| echo "No directory found in $(DESTDIR)$(infodir)" >&2 ; \ |
| fi |
| |
| install-pdf: pdf |
| $(INSTALL) -d -m 755 $(DESTDIR)$(pdfdir) |
| $(INSTALL) -m 644 user-manual.pdf $(DESTDIR)$(pdfdir) |
| |
| install-html: html |
| '$(SHELL_PATH_SQ)' ./install-webdoc.sh $(DESTDIR)$(htmldir) |
| |
| ../GIT-VERSION-FILE: FORCE |
| $(QUIET_SUBDIR0)../ $(QUIET_SUBDIR1) GIT-VERSION-FILE |
| |
| -include ../GIT-VERSION-FILE |
| |
| # |
| # Determine "include::" file references in asciidoc files. |
| # |
| docdep_prereqs = \ |
| mergetools-list.made $(mergetools_txt) \ |
| cmd-list.made $(cmds_txt) |
| |
| doc.dep : $(docdep_prereqs) $(wildcard *.txt) build-docdep.perl |
| $(QUIET_GEN)$(RM) $@+ $@ && \ |
| $(PERL_PATH) ./build-docdep.perl >$@+ $(QUIET_STDERR) && \ |
| mv $@+ $@ |
| |
| -include doc.dep |
| |
| cmds_txt = cmds-ancillaryinterrogators.txt \ |
| cmds-ancillarymanipulators.txt \ |
| cmds-mainporcelain.txt \ |
| cmds-plumbinginterrogators.txt \ |
| cmds-plumbingmanipulators.txt \ |
| cmds-synchingrepositories.txt \ |
| cmds-synchelpers.txt \ |
| cmds-purehelpers.txt \ |
| cmds-foreignscminterface.txt |
| |
| $(cmds_txt): cmd-list.made |
| |
| cmd-list.made: cmd-list.perl ../command-list.txt $(MAN1_TXT) |
| $(QUIET_GEN)$(RM) $@ && \ |
| $(PERL_PATH) ./cmd-list.perl ../command-list.txt $(QUIET_STDERR) && \ |
| date >$@ |
| |
| mergetools_txt = mergetools-diff.txt mergetools-merge.txt |
| |
| $(mergetools_txt): mergetools-list.made |
| |
| mergetools-list.made: ../git-mergetool--lib.sh $(wildcard ../mergetools/*) |
| $(QUIET_GEN)$(RM) $@ && \ |
| $(SHELL_PATH) -c 'MERGE_TOOLS_DIR=../mergetools && \ |
| . ../git-mergetool--lib.sh && \ |
| show_tool_names can_diff "* " || :' >mergetools-diff.txt && \ |
| $(SHELL_PATH) -c 'MERGE_TOOLS_DIR=../mergetools && \ |
| . ../git-mergetool--lib.sh && \ |
| show_tool_names can_merge "* " || :' >mergetools-merge.txt && \ |
| date >$@ |
| |
| clean: |
| $(RM) *.xml *.xml+ *.html *.html+ *.1 *.5 *.7 |
| $(RM) *.texi *.texi+ *.texi++ git.info gitman.info |
| $(RM) *.pdf |
| $(RM) howto-index.txt howto/*.html doc.dep |
| $(RM) technical/*.html technical/api-index.txt |
| $(RM) $(cmds_txt) $(mergetools_txt) *.made |
| $(RM) manpage-base-url.xsl |
| |
| $(MAN_HTML): %.html : %.txt asciidoc.conf |
| $(QUIET_ASCIIDOC)$(RM) $@+ $@ && \ |
| $(TXT_TO_HTML) -d manpage -o $@+ $< && \ |
| mv $@+ $@ |
| |
| $(OBSOLETE_HTML): %.html : %.txto asciidoc.conf |
| $(QUIET_ASCIIDOC)$(RM) $@+ $@ && \ |
| $(TXT_TO_HTML) -o $@+ $< && \ |
| mv $@+ $@ |
| |
| manpage-base-url.xsl: manpage-base-url.xsl.in |
| sed "s|@@MAN_BASE_URL@@|$(MAN_BASE_URL)|" $< > $@ |
| |
| %.1 %.5 %.7 : %.xml manpage-base-url.xsl |
| $(QUIET_XMLTO)$(RM) $@ && \ |
| $(XMLTO) -m $(MANPAGE_XSL) $(XMLTO_EXTRA) man $< |
| |
| %.xml : %.txt asciidoc.conf |
| $(QUIET_ASCIIDOC)$(RM) $@+ $@ && \ |
| $(TXT_TO_XML) -d manpage -o $@+ $< && \ |
| mv $@+ $@ |
| |
| user-manual.xml: user-manual.txt user-manual.conf |
| $(QUIET_ASCIIDOC)$(RM) $@+ $@ && \ |
| $(TXT_TO_XML) -d book -o $@+ $< && \ |
| mv $@+ $@ |
| |
| technical/api-index.txt: technical/api-index-skel.txt \ |
| technical/api-index.sh $(patsubst %,%.txt,$(API_DOCS)) |
| $(QUIET_GEN)cd technical && '$(SHELL_PATH_SQ)' ./api-index.sh |
| |
| technical/%.html: ASCIIDOC_EXTRA += -a git-relative-html-prefix=../ |
| $(patsubst %,%.html,$(API_DOCS) technical/api-index $(TECH_DOCS)): %.html : %.txt asciidoc.conf |
| $(QUIET_ASCIIDOC)$(TXT_TO_HTML) $*.txt |
| |
| XSLT = docbook.xsl |
| XSLTOPTS = --xinclude --stringparam html.stylesheet docbook-xsl.css |
| |
| user-manual.html: user-manual.xml $(XSLT) |
| $(QUIET_XSLTPROC)$(RM) $@+ $@ && \ |
| xsltproc $(XSLTOPTS) -o $@+ $(XSLT) $< && \ |
| mv $@+ $@ |
| |
| git.info: user-manual.texi |
| $(QUIET_MAKEINFO)$(MAKEINFO) --no-split -o $@ user-manual.texi |
| |
| user-manual.texi: user-manual.xml |
| $(QUIET_DB2TEXI)$(RM) $@+ $@ && \ |
| $(DOCBOOK2X_TEXI) user-manual.xml --encoding=UTF-8 --to-stdout >$@++ && \ |
| $(PERL_PATH) fix-texi.perl <$@++ >$@+ && \ |
| rm $@++ && \ |
| mv $@+ $@ |
| |
| user-manual.pdf: user-manual.xml |
| $(QUIET_DBLATEX)$(RM) $@+ $@ && \ |
| $(DBLATEX) -o $@+ $(DBLATEX_COMMON) $< && \ |
| mv $@+ $@ |
| |
| gitman.texi: $(MAN_XML) cat-texi.perl texi.xsl |
| $(QUIET_DB2TEXI)$(RM) $@+ $@ && \ |
| ($(foreach xml,$(sort $(MAN_XML)),xsltproc -o $(xml)+ texi.xsl $(xml) && \ |
| $(DOCBOOK2X_TEXI) --encoding=UTF-8 --to-stdout $(xml)+ && \ |
| rm $(xml)+ &&) true) > $@++ && \ |
| $(PERL_PATH) cat-texi.perl $@ <$@++ >$@+ && \ |
| rm $@++ && \ |
| mv $@+ $@ |
| |
| gitman.info: gitman.texi |
| $(QUIET_MAKEINFO)$(MAKEINFO) --no-split --no-validate $*.texi |
| |
| $(patsubst %.txt,%.texi,$(MAN_TXT)): %.texi : %.xml |
| $(QUIET_DB2TEXI)$(RM) $@+ $@ && \ |
| $(DOCBOOK2X_TEXI) --to-stdout $*.xml >$@+ && \ |
| mv $@+ $@ |
| |
| howto-index.txt: howto-index.sh $(wildcard howto/*.txt) |
| $(QUIET_GEN)$(RM) $@+ $@ && \ |
| '$(SHELL_PATH_SQ)' ./howto-index.sh $(sort $(wildcard howto/*.txt)) >$@+ && \ |
| mv $@+ $@ |
| |
| $(patsubst %,%.html,$(ARTICLES)) : %.html : %.txt |
| $(QUIET_ASCIIDOC)$(TXT_TO_HTML) $*.txt |
| |
| WEBDOC_DEST = /pub/software/scm/git/docs |
| |
| howto/%.html: ASCIIDOC_EXTRA += -a git-relative-html-prefix=../ |
| $(patsubst %.txt,%.html,$(wildcard howto/*.txt)): %.html : %.txt |
| $(QUIET_ASCIIDOC)$(RM) $@+ $@ && \ |
| sed -e '1,/^$$/d' $< | \ |
| $(TXT_TO_HTML) - >$@+ && \ |
| mv $@+ $@ |
| |
| install-webdoc : html |
| '$(SHELL_PATH_SQ)' ./install-webdoc.sh $(WEBDOC_DEST) |
| |
| # You must have a clone of 'git-htmldocs' and 'git-manpages' repositories |
| # next to the 'git' repository itself for the following to work. |
| |
| quick-install: quick-install-man |
| |
| require-manrepo:: |
| @if test ! -d $(MAN_REPO); \ |
| then echo "git-manpages repository must exist at $(MAN_REPO)"; exit 1; fi |
| |
| quick-install-man: require-manrepo |
| '$(SHELL_PATH_SQ)' ./install-doc-quick.sh $(MAN_REPO) $(DESTDIR)$(mandir) |
| |
| require-htmlrepo:: |
| @if test ! -d $(HTML_REPO); \ |
| then echo "git-htmldocs repository must exist at $(HTML_REPO)"; exit 1; fi |
| |
| quick-install-html: require-htmlrepo |
| '$(SHELL_PATH_SQ)' ./install-doc-quick.sh $(HTML_REPO) $(DESTDIR)$(htmldir) |
| |
| print-man1: |
| @for i in $(MAN1_TXT); do echo $$i; done |
| |
| lint-docs:: |
| $(QUIET_LINT)$(PERL_PATH) lint-gitlink.perl |
| |
| .PHONY: FORCE |