diff options
author | Norbert Thiebaud <nthiebaud@gmail.com> | 2016-03-14 19:34:01 -0500 |
---|---|---|
committer | Norbert Thiebaud <nthiebaud@gmail.com> | 2016-03-14 19:35:13 -0500 |
commit | 2848692ff421d3b450e33c72234a370d6e6ad9ef (patch) | |
tree | a9746638326c2cc8c98b681919e9f4250192652d /solenv/bin | |
parent | bfa7b700480fdc4c52ea91f30bcd274d963721f5 (diff) |
script/makefile to build doxygen docs in parallel
Change-Id: I6b56ac08db71eb354e0b2d57913e6e78d2652877
Diffstat (limited to 'solenv/bin')
-rw-r--r-- | solenv/bin/mkdocs.Makefile | 46 | ||||
-rwxr-xr-x | solenv/bin/mkdocs_portal.sh | 129 | ||||
-rwxr-xr-x | solenv/bin/mkonedoc.sh | 45 |
3 files changed, 220 insertions, 0 deletions
diff --git a/solenv/bin/mkdocs.Makefile b/solenv/bin/mkdocs.Makefile new file mode 100644 index 000000000000..2a8368470011 --- /dev/null +++ b/solenv/bin/mkdocs.Makefile @@ -0,0 +1,46 @@ +.SUFFIXES: + +gb_Side=host +BUILDDIR=$(shell pwd) +SRCDIR:=$(abspath $(dir $(firstword $(MAKEFILE_LIST)))/../..) +$(info SRCDIR:$(SRCDIR)) +include $(SRCDIR)/config_host.mk + +.PHONY: init_doxygen generate_tag generate_doc +.DEFAULT: generate_doc + +prefered_modules := sw sc sd +gbuild_modules := $(prefered_modules) $(filter-out $(prefered_modules),$(patsubst $(SRCDIR)/%/,%,$(dir $(wildcard $(SRCDIR)/*/Module_*.mk)))) +$(info gbuild_modules:$(gbuild_modules)) + +DOXYGEN_REF_TAGFILES=$(foreach m,$(gbuild_modules), $(BUILDDIR)/docs/$(m)/$(m).tags=./$(m)/html) +export DOXYGEN_REF_TAGFILES + +$(BUILDDIR)/docs/%.tag: init_doxygen + @echo "doxygen tag of $(basename $(notdir $@))" + @export DOXYGEN_INCLUDE_PATH=`echo $(SOLARINC) | sed -e 's/-I\.//g' -e 's/ -I/ /'g -e 's/ -isystem/ /g' -e 's|/usr/[^ ]*| |g'` ; \ + $(SRCDIR)/solenv/bin/mkonedoc.sh "$(basename $(notdir $@))" "tag" "$(SRCDIR)" "$(BUILDDIR)/docs" + @touch $@ + +$(BUILDDIR)/docs/%.doc: generate_tag + @echo "doxygen doc of $(basename $(notdir $@))" + @export DOXYGEN_INCLUDE_PATH=`echo $(SOLARINC) | sed -e 's/-I\.//g' -e 's/ -I/ /'g -e 's/ -isystem/ /g' -e 's|/usr/[^ ]*| |g'` ; \ + $(SRCDIR)/solenv/bin/mkonedoc.sh "$(basename $(notdir $@))" "doc" "$(SRCDIR)" "$(BUILDDIR)/docs" + @touch $@ + + + +all: generate_doc + +generate_tag: $(foreach m,$(gbuild_modules), $(BUILDDIR)/docs/$(m).tag) + @echo "all tag generated" + +generate_doc: $(foreach m,$(gbuild_modules), $(BUILDDIR)/docs/$(m).doc) + @$(SRCDIR)/solenv/bin/mkdoc_portal.sh "$(SRCDIR)" "$(BUILDDIR)/docs" + @echo "Done." + +init_doxygen: + @echo "init" + @rm -fr $(BUILDDIR)/docs + @mkdir $(BUILDDIR)/docs + diff --git a/solenv/bin/mkdocs_portal.sh b/solenv/bin/mkdocs_portal.sh new file mode 100755 index 000000000000..55b2ebbfe784 --- /dev/null +++ b/solenv/bin/mkdocs_portal.sh @@ -0,0 +1,129 @@ +#!/bin/bash + +SRCDIR="$1" +BASE_OUTPUT="$2" + +pushd "$SRCDIR" > /dev/null + + +function header +{ + local title="$1" + local breadcrumb="$2" + local output="$3" + + cat - > $output <<EOF +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> +<html> +<head> + <title>$title</title> + + <style> + * { margin: 0; padding: 0; } + body { font-family: sans-serif; font-size: 12px; } + #head { padding: 20px; background: #00A500; } + #head a { color: #000; } + #body { padding: 20px; } + #foot { padding: 10px; font-size: 9px; border-top: 1px #18A303 solid; margin-top: 25px; } + p { line-height: 1.7em; margin-bottom: 1em; } + pre { margin-bottom: 0.5em; } + .multi-col { -moz-column-width: 20em; -webkit-column-width: 20em; -moz-column-gap: 1em; -webkit-column-gap: 1em; } + h1 { margin-bottom: 0.5em; } + h2,h3,h4 { margin: 1.3em 0 0.5em 0; } + ul, ol { margin: 0.5em 1.5em; } + </style> +</head> +<body> + <div id="head"> + <h1>${title}</h1> + <p>${breadcrumb}</p> + </div> + <div id="body" style="multi-col"> +EOF +} + +function footer +{ +local output="$1" + + cat - >> $output <<EOF + +</div> +<div id="foot"> + <small> + <p>Generated by Libreoffice <a href="http://cgit.freedesktop.org/libreoffice/core/plain/solenv/bin/mkdocs.sh">Module Description Tool</a></p> + <p>Last updated: +EOF + +date -f '+%F %T' >> $output +cat - >> $output <<EOF + </p> + </small> +</div> +</body> +</html> +EOF + +} + +function proc_text +{ + # Local links: [[...]] + # Git links: [git:...] + # Other remote links: [...] + # Headings: == bleh == + # Paragraphs: \n\n + sed -re ' s/\[\[([-_a-zA-Z0-9]+)\]\]/<a href="\1.html">\1<\/a>/g' - \ + | sed -re ' s/\[git:([^]]+)\]/<a href="http:\/\/cgit.freedesktop.org\/libreoffice\/core\/tree\/\1">\1<\/a>/g' \ + | sed -re ' s/\[([^]]+)\]/<a href="\1">\1<\/a>/g' \ + | sed -re ' s/====([^=]+)====/<h4>\1<\/h4>/g' \ + | sed -re ' s/===([^=]+)===/<h3>\1<\/h3>/g' \ + | sed -re ' s/==([^=]+)==/<h2>\1<\/h2>/g' \ + | sed -re ':a;N;$!ba;s/\n\n/<\/p><p>/g' \ + | awk 'BEGIN { print "<p>" } { print } END { print "</p>" }' +} + +# generate entry page + +echo "generating index page" +header "LibreOffice Modules" " " "$BASE_OUTPUT/index.html" + +for module_name in *; do + if [ -d $module_name ]; then + cur_file=$(echo $module_name/README* $module_name/readme.txt*) + if [ -f "$cur_file" ]; then + # write index.html entry + text="<h2><a href=\"${module_name}.html\">${module_name}</a></h2>\n" + text="${text}$(head -n1 $cur_file | proc_text )" + echo -e $text >> "$BASE_OUTPUT/index.html" + + # write detailed module content + header "$module_name" "<a href=\"index.html\">LibreOffice</a> » ${module_name}" "$BASE_OUTPUT/${module_name}.html" + text="<p><b>View module in:</b>" + text="${text} <a href=\"http://cgit.freedesktop.org/libreoffice/core/tree/${module_name}\">cgit</a>" + if $(echo $INPUT_PROJECTS | grep -q $module_name); then + text="${text} <a href=\"${module_name}/html/classes.html\">Doxygen</a>" + fi + text="${text} </p><p> </p>" + echo -e $text >> "$BASE_OUTPUT/${module_name}.html" + proc_text < $cur_file >> "$BASE_OUTPUT/${module_name}.html" + footer "$BASE_OUTPUT/${module_name}.html" + else + empty_modules[${#empty_modules[*]}]=$module_name + fi + fi +done + +if [ ${#empty_modules[*]} -gt 0 ]; then + echo -e "<p> </p><p>READMEs were not available for these modules:</p><ul>\n" >> "$BASE_OUTPUT/index.html" + for module_name in "${empty_modules[@]}"; do + echo -e "<li><a href=\"http://cgit.freedesktop.org/libreoffice/core/tree/${module_name}\">${module_name}</a></li>\n" >> "$BASE_OUTPUT/index.html" + done + echo -e "</ul>\n" >> "$BASE_OUTPUT/index.html" +fi + +footer "$BASE_OUTPUT/index.html" + +popd > /dev/null + +## done diff --git a/solenv/bin/mkonedoc.sh b/solenv/bin/mkonedoc.sh new file mode 100755 index 000000000000..6ec3f5e72625 --- /dev/null +++ b/solenv/bin/mkonedoc.sh @@ -0,0 +1,45 @@ +#!/bin/bash + +module="$1" +mode="$2" +SRCDIR="$3" +BASE_OUTPUT="$4" + + +module_include="" +if [ -d "$module/inc" ]; then + module_include="$module/inc" +fi + +if [ -d "include/$module" ]; then + module_include="$module_include include/$module" +fi + +DOXYGEN_INPUT=`printf "%s" "$module/source $module_include"` +DOXYGEN_OUTPUT="$BASE_OUTPUT/$module" +DOXYGEN_VERSION="master" +DOXYGEN_PROJECTNAME="LibreOffice Module $module" +if [ "$mode" = "tag" ] ; then + DOXYGEN_OUR_TAGFILE="$DOXYGEN_OUTPUT/$module.tags" + DOXYGEN_REF_TAGFILES= +else + DOXYGEN_OUR_TAGFILE="$DOXYGEN_OUTPUT/$module.tags2" + DOXYGEN_REF_TAGFILES="$(echo $DOXYGEN_REF_TAGFILES | sed -e "s@$DOXYGEN_OUTPUT/$module.tags@@")" +fi + +# export variables referenced in doxygen config file +export DOXYGEN_INPUT +export DOXYGEN_OUTPUT +export DOXYGEN_INCLUDE_PATH +export DOXYGEN_VERSION +export DOXYGEN_OUR_TAGFILE +export DOXYGEN_REF_TAGFILES +export DOXYGEN_PROJECTNAME + + +echo "Calling doxygen mode $mode for $module" +echo "using tagfiles : $DOXYGEN_REF_TAGFILES" >> $BASE_OUTPUT/$module.log 2>&1 +doxygen "$SRCDIR/solenv/inc/doxygen_$mode.cfg" >> $BASE_OUTPUT/$module.log 2>&1 +echo "$(date "+%F %T") doxygen $module.$mode rc:$?" + + |