aboutsummaryrefslogtreecommitdiffstats
path: root/docs/mk/api.mk
diff options
context:
space:
mode:
Diffstat (limited to 'docs/mk/api.mk')
-rw-r--r--docs/mk/api.mk205
1 files changed, 205 insertions, 0 deletions
diff --git a/docs/mk/api.mk b/docs/mk/api.mk
new file mode 100644
index 0000000000..74cd2db456
--- /dev/null
+++ b/docs/mk/api.mk
@@ -0,0 +1,205 @@
+##===- docs/mk/api.mk --------------------------------------*- Makefile -*-===##
+#
+# The LLVM Compiler Infrastructure
+#
+# This file is distributed under the University of Illinois Open Source
+# License. See LICENSE.TXT for details.
+#
+##===----------------------------------------------------------------------===##
+#
+# Generated API documentation support module.
+#
+# The following variables must be defined before including this makefile:
+#
+# API.Project formal project name. eg. LLVM or Clang.
+# API.project filesystem project name. eg. llvm or clang.
+# API.srcdir top-most source dir used in doxygen .cfg file.
+#
+##===----------------------------------------------------------------------===##
+
+include $(LLVM_SRC_ROOT)/docs/mk/common.defs.mk
+
+API.in/ = $(PROJ_SRC_DIR)/
+API.out/ = ./
+
+API.html/ = $(API.out/)html/api/
+API.html.tar = $(API.out/)html-api.tar.gz
+
+API.doxygen = $(DOXYGEN)
+API.doxygen.target = $(API.html/)index.html
+API.doxygen.extradeps = $(foreach x,html xml h,$(wildcard $(API.in/)*.$(x)))
+API.doxygen.cfg = $(API.out/)doxygen.cfg
+API.doxygen.cfg.srcdir = $(API.srcdir)
+API.doxygen.cfg.objdir = .
+API.doxygen.cfg.output_dir = $(API.out/)
+API.doxygen.cfg.dot = # blank and doxygen will search path for 'dot'
+API.doxygen.cfg.opts = $(call SELECT,API.doxygen.cfg.opts,$(HOST_OS))
+API.doxygen.cfg.opts.__.Darwin = DOT_FONTNAME=Monaco DOT_FONTSIZE=8
+API.doxygen.cfg.opts.__.Linux = DOT_FONTNAME=FreeSans DOT_FONTSIZE=9
+API.doxygen.cfg.opts.__.default = # values from file
+API.doxygen.cfg.version = $(call fn.SVN.LCREV,$(API.srcdir))
+
+API.doxygen.css = $(API.html/)api.css \
+ $(API.html/)api.ie.css
+
+ifdef VERBOSE
+API.doxygen.cfg.opts := QUIET=NO WARN_IF_DOC_ERROR=YES $(API.doxygen.cfg.opts)
+endif
+
+API.files += $(API.html.tar)
+API.files += $(API.doxygen.cfg)
+API.files += $(API.doxygen.css)
+API.files += $(API.doxygen.target)
+
+DOCS.mkdir.files += $(API.files)
+
+##===----------------------------------------------------------------------===##
+
+INSTALL.out/ = $(PROJ_prefix)/share/
+INSTALL.doc/ = $(INSTALL.out/)doc/$(API.project)/
+
+INSTALL.html/ = $(INSTALL.doc/)html/api/
+INSTALL.html.target = $(API.doxygen.target:$(API.html/)%=$(INSTALL.html/)%)
+INSTALL.html.tar = $(INSTALL.doc/)$(notdir $(API.html.tar))
+
+INSTALL.files += $(INSTALL.html.tar)
+
+DOCS.mkdir.files += $(INSTALL.doc/)file-placebo
+DOCS.mkdir.files += $(INSTALL.files)
+
+##===----------------------------------------------------------------------===##
+
+clean-local::
+ -$(Verb) $(RM) -f $(API.files)
+ -$(Verb) $(call fn.RMRF,$(API.html/))
+
+ifeq ($(ENABLE_DOXYGEN),1)
+all:: docs docs-tar
+install-local:: install-docs
+uninstall-local:: uninstall-docs
+endif
+
+##===----------------------------------------------------------------------===##
+
+.PHONY: docs-tar
+docs-tar: $(API.html.tar)
+
+.PHONY: docs
+docs: $(API.doxygen.target)
+
+$(API.html.tar): | $(dir $(API.html.tar))
+$(API.html.tar): $(API.doxygen.target)
+ $(Echo) Creating $(API.Project) API documentation tarball
+ $(Verb) (set -e; cd $(API.out/); \
+ $(TAR) cf - --exclude='*.md5' --exclude='*.map' html/api) \
+ $(call fn.PIPE.COMP,$@) > $@
+
+$(API.doxygen.cfg): | $(dir $(API.doxygen.cfg))
+$(API.doxygen.cfg): $(notdir $(API.doxygen.cfg)).in
+ $(Echo) Generating $(API.Project) doxygen config
+ $(Verb) $(CAT) $< | $(SED) \
+ -e 's,@srcdir@,$(API.doxygen.cfg.srcdir),g' \
+ -e 's,@objdir@,$(API.doxygen.cfg.objdir),g' \
+ -e 's,@output_dir@,$(API.doxygen.cfg.output_dir),g' \
+ -e 's,@dot@,$(API.doxygen.cfg.dot),g' \
+ -e 's,@version@,$(API.doxygen.cfg.version),g' \
+ > $@
+
+$(API.html/)api.css: | $(dir $(API.html/)api.css)
+$(API.html/)api.css: api.css
+ $(Echo) Copying $(API.Project) doxygen stylesheet
+ $(Verb) $(CP) $< $@
+
+# IE misbehaves when browser-specific constructs are used.
+# This target strips them out to create an IE-specific css file.
+# The following is an example of setting background to an extension.
+# With IE instead of skipping an unrecognized extension it resets
+# the background:
+#
+# background: -webkit-gradient(...)
+#
+# Note this simple approach assumes source has strippable single-lines.
+#
+$(API.html/)api.ie.css: | $(dir $(API.html/)api.ie.css)
+$(API.html/)api.ie.css: api.css
+ $(Echo) Generating $(API.Project) doxygen stylesheet for IE
+ $(Verb) $(CAT) $< | egrep -v -e '-(moz|webkit)' > $@
+
+# Generate API docs.
+#
+# Define API.nodot=1 to not use 'dot' tool even if available.
+# In this mode doxygen has built-in support to generate only class-diagrams
+# and thus all other diagrams are skipped. Shaves 80% off generate time.
+#
+# We pipe (doxygen.cfg + overrides) to doxygen. This allows us to override
+# almost any setting in doxygen.cfg file without having to edit it.
+#
+ifneq (undefined,$(origin API.nodot))
+$(API.doxygen.target): API.doxygen.cfg.opts += HAVE_DOT=NO
+$(API.doxygen.target): API.doxygen.target.msg = " (FAST)"
+endif
+$(API.doxygen.target): | $(dir $(API.doxygen.target))
+$(API.doxygen.target): $(API.doxygen.cfg)
+$(API.doxygen.target): $(API.doxygen.css)
+$(API.doxygen.target): $(API.doxygen.extradeps)
+ $(Echo) Generating $(API.Project) API documentation$(API.doxygen.target.msg)
+ $(Verb) ($(CAT) $(API.doxygen.cfg)$(foreach n,$(API.doxygen.cfg.opts),; echo '$n')) | \
+ $(API.doxygen) -
+
+##===----------------------------------------------------------------------===##
+
+.PHONY: install-docs
+install-docs: $(INSTALL.html.tar)
+install-docs: $(INSTALL.html.target)
+
+$(INSTALL.html.target): | $(INSTALL.doc/)
+$(INSTALL.html.target): $(API.html.tar)
+ $(Echo) Installing $(API.Project) API documentation
+ $(Verb) $(CAT) $(API.html.tar) $(call fn.PIPE.DECOMP,$(API.html.tar)) | \
+ (set -e; cd $(INSTALL.doc/); $(TAR) xf -)
+ @touch $@
+
+$(INSTALL.html.tar): | $(dir $(INSTALL.html.tar))
+$(INSTALL.html.tar): $(API.html.tar)
+ $(Echo) Installing $(API.Project) API documentation tarball
+ $(Verb) $(DataInstall) $< $@
+
+uninstall-docs:
+ $(Echo) Uninstalling $(API.Project) API documentation
+ -$(Verb) $(RM) -f $(INSTALL.files)
+ -$(Verb) $(call fn.RMRF,$(INSTALL.html/))
+
+##===----------------------------------------------------------------------===##
+
+DOCS.vars.mandatory += API.Project API.project API.srcdir
+DOCS.vars.print += $(sort $(filter INSTALL.%/,$(.VARIABLES)))
+
+HELP.sections += API.help
+
+define API.help
+ API Documentation Module. This module is srcdir/objdir build-friendly.
+
+ WARNING: The following directories are recursively deleted during cleanup
+ procedures. Be sure not to mix files therein or bad things will happen.
+
+ $(API.html/)
+ $(INSTALL.html/)
+
+ ------------------------------------------------------------------------------
+ TARGET NOTES
+ ------------------------------------------------------------------------------
+ *all invokes target docs
+ *install invokes target install-docs
+ *uninstall invokes target uninstall-docs
+ ------------------------------------------------------------------------------
+ docs generate API docs from sources using doxygen
+ ------------------------------------------------------------------------------
+ docs-tar create docs tarball $(API.html.tar)
+ clean remove built files
+ install-docs install to $(INSTALL.doc/)
+ uninstall-docs remove installed files
+ ------------------------------------------------------------------------------
+ (targets marked with '*' require configure --enable-doxygen)
+endef
+
+include $(LLVM_SRC_ROOT)/docs/mk/common.rules.mk