blob: ba5bba019f06570e69680325d6c04329d7d1d279 [file] [log] [blame]
Joey Armstrong36592e32022-11-28 09:00:28 -05001# -*- makefile -*-
2# -----------------------------------------------------------------------
Joey Armstrong8d62cd92022-12-22 13:53:48 -05003# Copyright 2022-2023 Open Networking Foundation (ONF) and the ONF Contributors
Joey Armstrong36592e32022-11-28 09:00:28 -05004#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16# -----------------------------------------------------------------------
Zack Williams071eda22019-05-15 18:19:51 -070017# Makefile for Sphinx documentation
18
Joey Armstrong36592e32022-11-28 09:00:28 -050019.DEFAULT_GOAL := help
20
21TOP ?= .
22MAKEDIR ?= $(TOP)/makefiles
23
24$(if $(VERBOSE),$(eval export VERBOSE=$(VERBOSE))) # visible to include(s)
25
26##--------------------##
27##---] INCLUDES [---##
28##--------------------##
29include $(MAKEDIR)/consts.mk
30include $(MAKEDIR)/help/include.mk
31include $(MAKEDIR)/patches/include.mk
32include $(MAKEDIR)/help/variables.mk
Zack Williams071eda22019-05-15 18:19:51 -070033
34# You can set these variables from the command line.
35SPHINXOPTS ?=
36SPHINXBUILD ?= sphinx-build
37SOURCEDIR ?= .
38BUILDDIR ?= _build
39
Zack Williams88df4742019-12-20 08:24:47 -070040# Other repos with documentation to include.
41# edit the `git_refs` file with the commit/tag/branch that you want to use
Andrea Campanellac18d1182021-09-10 12:01:38 +020042OTHER_REPO_DOCS ?= bbsim cord-tester ofagent-go openolt voltctl voltha-openolt-adapter voltha-openonu-adapter-go voltha-protos voltha-system-tests device-management-interface voltha-helm-charts
Zack Williams88df4742019-12-20 08:24:47 -070043
Joey Armstrong36592e32022-11-28 09:00:28 -050044ifdef NO_OTHER_REPO_DOCS
45 # Inhibit pulling in external repos.
46 # python 3.10+ patching not supported by all repos yet.
47 OTHER_REPO_DOCS := $(null)
48endif
49
Zack Williams16042b62020-03-29 22:03:16 -070050# Static docs, built by other means (usually robot framework)
51STATIC_DOCS := _static/voltha-system-tests _static/cord-tester
52
53# name of python virtualenv that is used to run commands
54VENV_NAME := venv_docs
Zack Williams071eda22019-05-15 18:19:51 -070055
Zack Williams88df4742019-12-20 08:24:47 -070056.PHONY: help test lint reload Makefile prep
Zack Williams071eda22019-05-15 18:19:51 -070057
Zack Williams16042b62020-03-29 22:03:16 -070058# Put it first so that "make" without argument is like "make help".
Joey Armstrong36592e32022-11-28 09:00:28 -050059help :: $(VENV_NAME)
60 @ echo
61 @ source $</bin/activate ; set -u ;\
Zack Williams16042b62020-03-29 22:03:16 -070062 $(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
63
Joey Armstrong36592e32022-11-28 09:00:28 -050064# -----------------------------------------------------------------------
Zack Williams071eda22019-05-15 18:19:51 -070065# Create the virtualenv with all the tools installed
Joey Armstrong36592e32022-11-28 09:00:28 -050066# -----------------------------------------------------------------------
Joey Armstrongf88b7382022-12-02 15:04:21 -050067.PHONY: venv
68venv: $(VENV_NAME)
69
Zack Williams16042b62020-03-29 22:03:16 -070070$(VENV_NAME):
Joey Armstrong36592e32022-11-28 09:00:28 -050071 @echo
72 @echo "============================="
73 @echo "Installing python virtual env"
74 @echo "============================="
75 virtualenv -p python3 $@ ;\
76 source ./$@/bin/activate ;\
77 python -m pip install -r requirements.txt
78ifndef NO_PATCH
79 @echo
80 @echo "========================================"
Joey Armstronga8bc8e12022-12-04 07:06:59 -050081 @echo "Applying python virtualenv patches as needed (v3.10+)"
Joey Armstrong36592e32022-11-28 09:00:28 -050082 @echo "========================================"
Joey Armstrong1a9b7d12022-12-19 14:13:07 -050083 ./patches/python_310_migration.sh '--venv' "$@" 'apply'
Joey Armstrong36592e32022-11-28 09:00:28 -050084endif
Zack Williams071eda22019-05-15 18:19:51 -070085
86# automatically reload changes in browser as they're made
Zack Williams16042b62020-03-29 22:03:16 -070087reload: $(VENV_NAME)
Zack Williamsc6460c22019-12-18 14:54:43 -070088 source $</bin/activate ; set -u ;\
Zack Williams071eda22019-05-15 18:19:51 -070089 sphinx-reload $(SOURCEDIR)
90
Joey Armstrong8d62cd92022-12-22 13:53:48 -050091## -----------------------------------------------------------------------
92## Intent: lint and link verification. linkcheck is part of sphinx
93## -----------------------------------------------------------------------
Zack Williams071eda22019-05-15 18:19:51 -070094test: lint linkcheck
Joey Armstronga8bc8e12022-12-04 07:06:59 -050095
Joey Armstrong8d62cd92022-12-22 13:53:48 -050096## -----------------------------------------------------------------------
97## Intent: Exercise all generation targets
98## -----------------------------------------------------------------------
99test-all-targets += html
100test-all-targets += coverage
101# test-all-targets += changes
102# test-all-targets += info
103test-all-targets += man
104test-all-targe4ts += text
105# test-all-targets += latex
106
107
108test-all : test
109 $(MAKE) $(test-all-targets)
110
Joey Armstrong36592e32022-11-28 09:00:28 -0500111# doctest
112# coverage
113# linkcheck
Zack Williamsc6460c22019-12-18 14:54:43 -0700114lint: doc8
Joey Armstronga8bc8e12022-12-04 07:06:59 -0500115# include $(MAKEDIR)/lint/shell.mk
Zack Williams071eda22019-05-15 18:19:51 -0700116
Zack Williams16042b62020-03-29 22:03:16 -0700117doc8: $(VENV_NAME) | $(OTHER_REPO_DOCS)
Zack Williamsc6460c22019-12-18 14:54:43 -0700118 source $</bin/activate ; set -u ;\
119 doc8 --max-line-length 119 \
Zack Williams16042b62020-03-29 22:03:16 -0700120 $$(find . -name \*.rst ! -path "*venv*" ! -path "*vendor*" ! -path "*repos*" )
Zack Williams071eda22019-05-15 18:19:51 -0700121
122# markdown linting
123# currently not enabled, should be added to lint target
124LINT_STYLE ?= mdl_strict.rb
125md-lint: | $(OTHER_REPO_DOCS)
126 @echo "markdownlint(mdl) version: `mdl --version`"
127 @echo "style config:"
128 @echo "---"
129 @cat $(LINT_STYLE)
130 @echo "---"
Zack Williams16042b62020-03-29 22:03:16 -0700131 mdl -s $(LINT_STYLE) `find -L $(SOURCEDIR) ! -path "./_$(VENV_NAME)/*" ! -path "./_build/*" ! -path "./repos/*" ! -path "*vendor*" -name "*.md"`
Zack Williams071eda22019-05-15 18:19:51 -0700132
133# clean up
134clean:
Joey Armstrong36592e32022-11-28 09:00:28 -0500135 $(RM) -r $(BUILDDIR) $(OTHER_REPO_DOCS) $(STATIC_DOCS)
Zack Williams071eda22019-05-15 18:19:51 -0700136
Joey Armstrong36592e32022-11-28 09:00:28 -0500137clean-all sterile: clean
138 $(RM) -r $(VENV_NAME) repos
Zack Williams071eda22019-05-15 18:19:51 -0700139
Zack Williams071eda22019-05-15 18:19:51 -0700140# checkout the repos inside repos/ dir
141repos:
142 mkdir repos
143
144# build directory paths in repos/* to perform 'git clone <repo>' into
145CHECKOUT_REPOS = $(foreach repo,$(OTHER_REPO_DOCS),repos/$(repo))
146
147# Host holding the git server
148REPO_HOST ?= https://gerrit.opencord.org
149
150# For QA patchset validation - set SKIP_CHECKOUT to the repo name and
151# pre-populate it under repos/ with the specific commit to being validated
152SKIP_CHECKOUT ?=
153
Zack Williams88df4742019-12-20 08:24:47 -0700154# clone (only if doesn't exist)
Zack Williams071eda22019-05-15 18:19:51 -0700155$(CHECKOUT_REPOS): | repos
Zack Williams071eda22019-05-15 18:19:51 -0700156 if [ ! -d '$@' ] ;\
157 then git clone $(REPO_HOST)/$(@F) $@ ;\
Zack Williams071eda22019-05-15 18:19:51 -0700158 fi
159
Zack Williams33085522020-02-28 11:41:01 -0700160# checkout correct ref if not under test, then copy subdirectories into main
Zack Williams17e34022019-12-20 13:51:54 -0700161# docs dir
Zack Williams071eda22019-05-15 18:19:51 -0700162$(OTHER_REPO_DOCS): | $(CHECKOUT_REPOS)
Zack Williams88df4742019-12-20 08:24:47 -0700163 if [ "$(SKIP_CHECKOUT)" != "$@" ] ;\
164 then GIT_REF=`grep '^$@ ' git_refs | awk '{print $$3}'` ;\
Zack Williams6c1703f2019-12-20 15:31:58 -0700165 cd "repos/$@" && git checkout $$GIT_REF ;\
Zack Williams88df4742019-12-20 08:24:47 -0700166 fi
Zack Williams17e34022019-12-20 13:51:54 -0700167 GIT_SUBDIR=`grep '^$@ ' git_refs | awk '{print $$2}'` ;\
Zack Williams33085522020-02-28 11:41:01 -0700168 cp -r repos/$(@)$$GIT_SUBDIR $@ ;\
Zack Williams071eda22019-05-15 18:19:51 -0700169
Andrea Campanella92bd59b2020-01-30 17:26:32 +0100170# Build Robot documentation in voltha-system-tests and copy it into _static.
171_static/voltha-system-tests: | $(OTHER_REPO_DOCS)
172 make -C voltha-system-tests gendocs
173 mkdir -p $@
174 cp -r voltha-system-tests/gendocs/* $@
175
Andy Bavier39d67b12020-02-27 16:08:52 -0700176# Build Robot documentation in cord-tester and copy it into _static.
177_static/cord-tester: | $(OTHER_REPO_DOCS)
178 make -C cord-tester gendocs
179 mkdir -p $@
180 cp -r cord-tester/gendocs/* $@
181
Zack Williams071eda22019-05-15 18:19:51 -0700182# generate a list of git checksums suitable for updating git_refs
183freeze: repos
184 @for repo in $(OTHER_REPO_DOCS) ; do \
185 GIT_SUBDIR=`grep "^$$repo " git_refs | awk '{print $$2}'` ;\
Zack Williams6c1703f2019-12-20 15:31:58 -0700186 cd "repos/$$repo" > /dev/null ;\
Zack Williams071eda22019-05-15 18:19:51 -0700187 HEAD_SHA=`git rev-parse HEAD` ;\
188 printf "%-24s %-8s %-40s\n" $$repo $$GIT_SUBDIR $$HEAD_SHA ;\
Zack Williams6c1703f2019-12-20 15:31:58 -0700189 cd ../.. ;\
Zack Williams071eda22019-05-15 18:19:51 -0700190 done
191
Zack Williams16042b62020-03-29 22:03:16 -0700192# build multiple versions
193multiversion: $(VENV_NAME) Makefile | prep $(OTHER_REPO_DOCS)
Zack Williams88df4742019-12-20 08:24:47 -0700194 source $</bin/activate ; set -u ;\
Zack Williams16042b62020-03-29 22:03:16 -0700195 sphinx-multiversion "$(SOURCEDIR)" "$(BUILDDIR)/multiversion" $(SPHINXOPTS)
196 cp "$(SOURCEDIR)/_templates/meta_refresh.html" "$(BUILDDIR)/multiversion/index.html"
Zack Williams88df4742019-12-20 08:24:47 -0700197
Zack Williams16042b62020-03-29 22:03:16 -0700198# prep target - used in sphinx-multiversion to properly link
199prep: | $(OTHER_REPO_DOCS) $(STATIC_DOCS)
Andy Bavier5dee6ae2020-01-29 16:03:40 -0700200
Zack Williams071eda22019-05-15 18:19:51 -0700201# Catch-all target: route all unknown targets to Sphinx using the new
202# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
Joey Armstrong36592e32022-11-28 09:00:28 -0500203# %: $(VENV_NAME) Makefile | $(OTHER_REPO_DOCS) $(STATIC_DOCS)
204
Joey Armstrong1a9b7d12022-12-19 14:13:07 -0500205include $(MAKEDIR)/voltha/docs-catchall-targets.mk
Joey Armstrong36592e32022-11-28 09:00:28 -0500206$(voltha-docs-catchall): $(VENV_NAME) Makefile | $(OTHER_REPO_DOCS) $(STATIC_DOCS)
207 @echo " ** CATCHALL: $@"
Zack Williamsc6460c22019-12-18 14:54:43 -0700208 source $</bin/activate ; set -u ;\
Zack Williams071eda22019-05-15 18:19:51 -0700209 $(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
Joey Armstrong36592e32022-11-28 09:00:28 -0500210
Joey Armstronga8bc8e12022-12-04 07:06:59 -0500211## -----------------------------------------------------------------------
212## -----------------------------------------------------------------------
213BROWSER ?= $(error Usage: $(MAKE) $@ BROWSER=)
214view-html:
215 "$(BROWSER)" _build/html/index.html
216
217## -----------------------------------------------------------------------
218## -----------------------------------------------------------------------
Joey Armstrong36592e32022-11-28 09:00:28 -0500219include $(MAKEDIR)/help/trailer.mk
220
221# [EOF]