all:: CGIT_VERSION = v2.1.0 CGIT_SCRIPT_NAME = cgit.cgi CGIT_SCRIPT_PATH = /var/www/htdocs/cgit CGIT_DATA_PATH = $(CGIT_SCRIPT_PATH) CGIT_CONFIG = /etc/cgitrc CACHE_ROOT = /var/cache/cgit prefix = /usr/local libdir = $(prefix)/lib filterdir = $(libdir)/cgit/filters docdir = $(prefix)/share/doc/cgit htmldir = $(docdir) pdfdir = $(docdir) mandir = $(prefix)/share/man SHA1_HEADER = GIT_VER = 2.54.0 GIT_URL = https://www.kernel.org/pub/software/scm/git/git-$(GIT_VER).tar.xz INSTALL = install COPYTREE = cp -r # Project layout. Sources live in source/, web assets in assets/, the bundled # Git tree in libraries/git, and every generated file lands in build/. SRCDIR = source ASSETDIR = assets GITDIR = libraries/git BUILDDIR = build # The bundled Git tree is two levels down, so the sub-make reaches back to the # project root with "../../". TO_ROOT = ../../ # Documentation. The man-page source (*.5.txt) sits at the project root and is # rendered into build/. MAN5_TXT = $(wildcard *.5.txt) MAN_TXT = $(MAN5_TXT) DOC_MAN5 = $(patsubst %.txt,$(BUILDDIR)/%,$(MAN5_TXT)) DOC_HTML = $(patsubst %.txt,$(BUILDDIR)/%.html,$(MAN_TXT)) DOC_PDF = $(patsubst %.txt,$(BUILDDIR)/%.pdf,$(MAN_TXT)) ASCIIDOC = asciidoc ASCIIDOC_EXTRA = ASCIIDOC_HTML = xhtml11 ASCIIDOC_COMMON = $(ASCIIDOC) $(ASCIIDOC_EXTRA) TXT_TO_HTML = $(ASCIIDOC_COMMON) -b $(ASCIIDOC_HTML) # Reuse Git's platform detection, then let the user override the settings # above through cgit.conf. -include $(GITDIR)/config.mak.uname -include cgit.conf export CGIT_VERSION CGIT_SCRIPT_NAME CGIT_SCRIPT_PATH CGIT_DATA_PATH CGIT_CONFIG CACHE_ROOT .SUFFIXES: all:: cgit # cgit is compiled inside the bundled Git tree so it can reuse Git's build # machinery (see source/cgit.mk). Objects and the binary go to build/. cgit: +@$(MAKE) -C $(GITDIR) -f $(TO_ROOT)$(SRCDIR)/cgit.mk \ $(TO_ROOT)$(BUILDDIR)/cgit $(EXTRA_GIT_TARGETS) NO_CURL=1 NO_OPENSSL=1 sparse: +@$(MAKE) -C $(GITDIR) -f $(TO_ROOT)$(SRCDIR)/cgit.mk \ NO_CURL=1 NO_OPENSSL=1 cgit-sparse # Building the test suite needs a fully built Git tree for its helpers, hence # EXTRA_GIT_TARGETS=all. test: cgit-with-git +@$(MAKE) -C tests all cgit-with-git: +@$(MAKE) cgit EXTRA_GIT_TARGETS=all install: all $(INSTALL) -m 0755 -d $(DESTDIR)$(CGIT_SCRIPT_PATH) $(INSTALL) -m 0755 $(BUILDDIR)/cgit $(DESTDIR)$(CGIT_SCRIPT_PATH)/$(CGIT_SCRIPT_NAME) $(INSTALL) -m 0755 -d $(DESTDIR)$(CGIT_DATA_PATH) $(INSTALL) -m 0644 $(ASSETDIR)/cgit.css $(DESTDIR)$(CGIT_DATA_PATH)/cgit.css $(INSTALL) -m 0644 $(ASSETDIR)/cgit.js $(DESTDIR)$(CGIT_DATA_PATH)/cgit.js $(INSTALL) -m 0644 $(ASSETDIR)/cgit.png $(DESTDIR)$(CGIT_DATA_PATH)/cgit.png $(INSTALL) -m 0644 $(ASSETDIR)/favicon.ico $(DESTDIR)$(CGIT_DATA_PATH)/favicon.ico $(INSTALL) -m 0644 $(ASSETDIR)/robots.txt $(DESTDIR)$(CGIT_DATA_PATH)/robots.txt $(INSTALL) -m 0755 -d $(DESTDIR)$(filterdir) $(COPYTREE) extensions/* $(DESTDIR)$(filterdir) install-doc: install-man install-html install-pdf install-man: doc-man $(INSTALL) -m 0755 -d $(DESTDIR)$(mandir)/man5 $(INSTALL) -m 0644 $(DOC_MAN5) $(DESTDIR)$(mandir)/man5 install-html: doc-html $(INSTALL) -m 0755 -d $(DESTDIR)$(htmldir) $(INSTALL) -m 0644 $(DOC_HTML) $(DESTDIR)$(htmldir) install-pdf: doc-pdf $(INSTALL) -m 0755 -d $(DESTDIR)$(pdfdir) $(INSTALL) -m 0644 $(DOC_PDF) $(DESTDIR)$(pdfdir) define rm_f rm -f $(1) endef uninstall: rm -f $(DESTDIR)$(CGIT_SCRIPT_PATH)/$(CGIT_SCRIPT_NAME) rm -f $(DESTDIR)$(CGIT_DATA_PATH)/cgit.css rm -f $(DESTDIR)$(CGIT_DATA_PATH)/cgit.js rm -f $(DESTDIR)$(CGIT_DATA_PATH)/cgit.png rm -f $(DESTDIR)$(CGIT_DATA_PATH)/favicon.ico rm -f $(DESTDIR)$(CGIT_DATA_PATH)/robots.txt $(foreach file,$(patsubst extensions/%,%,$(shell find extensions/ ! -type d)), \ $(call rm_f,$(DESTDIR)$(filterdir)/$(file))) uninstall-doc: uninstall-man uninstall-html uninstall-pdf uninstall-man: @for i in $(notdir $(DOC_MAN5)); do \ rm -fv $(DESTDIR)$(mandir)/man5/$$i; \ done uninstall-html: @for i in $(notdir $(DOC_HTML)); do \ rm -fv $(DESTDIR)$(htmldir)/$$i; \ done uninstall-pdf: @for i in $(notdir $(DOC_PDF)); do \ rm -fv $(DESTDIR)$(pdfdir)/$$i; \ done doc: doc-man doc-html doc-pdf doc-man: doc-man5 doc-man5: $(DOC_MAN5) doc-html: $(DOC_HTML) doc-pdf: $(DOC_PDF) $(DOC_MAN5): $(BUILDDIR)/%.5 : %.5.txt @mkdir -p $(BUILDDIR) a2x -f manpage -D $(BUILDDIR) $< $(DOC_HTML): $(BUILDDIR)/%.html : %.txt @mkdir -p $(BUILDDIR) $(TXT_TO_HTML) -o $@ $< $(DOC_PDF): $(BUILDDIR)/%.pdf : %.txt @mkdir -p $(BUILDDIR) a2x -f pdf -D $(BUILDDIR) $< # Everything generated lives under build/, so cleaning is a single remove. clean: $(RM) -r $(BUILDDIR) cleanall: clean @if test -e $(GITDIR)/Makefile; then $(MAKE) -C $(GITDIR) clean; fi # Fetch a Git release tarball for builds without the submodule checked out. get-git: mkdir -p $(dir $(GITDIR)) curl -L $(GIT_URL) | tar -xJf - && rm -rf $(GITDIR) && mv git-$(GIT_VER) $(GITDIR) tags: @mkdir -p $(BUILDDIR) find $(SRCDIR) -name '*.[ch]' | xargs ctags -f $(BUILDDIR)/tags .PHONY: all cgit cgit-with-git sparse test get-git tags .PHONY: clean cleanall .PHONY: doc doc-html doc-man doc-man5 doc-pdf .PHONY: install install-doc install-html install-man install-pdf .PHONY: uninstall uninstall-doc uninstall-html uninstall-man uninstall-pdf