# this program; if not, write to the Free Software Foundation, Inc., 51
# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
-# $Id: ocaml-vars.mk 4236 2007-08-31 09:45:13Z zack $
+# $Id: ocaml-vars.mk 4403 2007-09-07 21:09:52Z gildor $
_cdbs_scripts_path ?= /usr/lib/cdbs
_cdbs_rules_path ?= /usr/share/cdbs/1/rules
# space separated list of packages on which ocamldoc usage is required. For
# each package listed here will have ocamldoc invoked on all *.ml/*.mli files
# installed under $(OCAML_STDLIB_DIR) to generated html documentation which
-# will be shipped in /usr/share/doc/PACKAGE/html/*.
+# will be shipped in $(OCAML_OCAMLDOC_DESTDIR_HTML).
# Typical usage is OCAML_OCAMLDOC_PACKAGES = $(OCAML_LIBDEV_PACKAGES).
# For debian/rules writers
OCAML_OCAMLDOC_PACKAGES =
#OCAML_OCAMLDOC_PACKAGES = $(OCAML_LIBDEV_PACKAGES) # more "aggressive" default
+# space separated list of packages for which a pkg.doc-base.ocamldoc-apiref is
+# required. This file contains is the debian doc-base description of file which
+# should be located in the directory $(OCAML_OCAMLDOC_DESTDIR_HTML)
+# For debian/rules writers
+OCAML_OCAMLDOC_PACKAGES_DOCBASE =
+
+# ocamlfind flags which must be used in order to generate
+# correctly the ocamldoc documentation
+# For debian/rules writers
+OCAML_OCAMLDOC_OCAMLFIND_FLAGS =
+
# generic (i.e. non backend specific) flags to be passed to ocamldoc
# For debian/rules writers
OCAML_OCAMLDOC_FLAGS = -stars -m A
# can use "$(cdbs_curpkg)" stem there, it will be expanded to the current
# package name by CDBS
# For debian/rules writers
-OCAML_OCAMLDOC_DESTDIR_HTML = usr/share/doc/$(cdbs_curpkg)/html/api
+OCAML_OCAMLDOC_DESTDIR_HTML = $(shell ocamldoc-api-ref-config --html-directory $(cdbs_curpkg))
endif
# this program; if not, write to the Free Software Foundation, Inc., 51
# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
-# $Id: ocaml.mk 4274 2007-09-02 17:12:05Z zack $
+# $Id: ocaml.mk 4403 2007-09-07 21:09:52Z gildor $
_cdbs_scripts_path ?= /usr/lib/cdbs
_cdbs_rules_path ?= /usr/share/cdbs/1/rules
# post-install hook to invoke ocamldoc on OCAML_OCAMLDOC_PACKAGES packages
$(patsubst %,binary-install/%,$(DEB_PACKAGES))::
- @if (echo $(OCAML_OCAMLDOC_PACKAGES) | egrep '( |^)$(cdbs_curpkg)( |$$)' > /dev/null) ; then \
+ @OCAMLDOC="ocamldoc $(OCAML_OCAMLDOC_FLAGS)"; \
+ if test -n "$(OCAML_OCAMLDOC_OCAMLFIND_FLAGS)" ; then \
+ if ! test -x "/usr/bin/ocamlfind"; then \
+ echo "OCamlfind flags set and no ocamlfind to be found" >&2; \
+ exit 1; \
+ fi; \
+ OCAMLDOC="ocamlfind $$OCAMLDOC $(OCAML_OCAMLDOC_OCAMLFIND_FLAGS)"; \
+ fi; \
+ OCAML_OCAMLDOC_INCLUDE=`for i in $(OCAML_OCAMLDOC_PACKAGES); do \
+ find debian/$$i/$(OCAML_STDLIB_DIR)/ -type d -exec echo -I \{} \; ; \
+ done`; \
+ if (echo $(OCAML_OCAMLDOC_PACKAGES) | egrep '( |^)$(cdbs_curpkg)( |$$)' > /dev/null) ; then \
echo 'mkdir -p debian/$(cdbs_curpkg)/$(OCAML_OCAMLDOC_DESTDIR_HTML)' ; \
mkdir -p debian/$(cdbs_curpkg)/$(OCAML_OCAMLDOC_DESTDIR_HTML) ; \
echo 'invoking ocamldoc on debian/$(cdbs_curpkg)$(OCAML_STDLIB_DIR)/ ...' ; \
find debian/$(cdbs_curpkg)$(OCAML_STDLIB_DIR)/ \
-type f -name '*.mli' -or -name '*.ml' \
- | xargs ocamldoc $(OCAML_OCAMLDOC_FLAGS) \
- -html $(OCAML_OCAMLDOC_FLAGS_HTML) \
+ | xargs $$OCAMLDOC -html $(OCAML_OCAMLDOC_FLAGS_HTML) \
-d debian/$(cdbs_curpkg)/$(OCAML_OCAMLDOC_DESTDIR_HTML) \
|| true ; \
fi
# post-build hook to create doc-base entries for OCAML_OCAMLDOC_PACKAGES packages
$(patsubst %,build/%,$(DEB_PACKAGES))::
- @if (echo $(OCAML_OCAMLDOC_PACKAGES) | egrep '( |^)$(cdbs_curpkg)( |$$)' > /dev/null) ; then \
- sed -e 's/@PACKAGE@/$(cdbs_curpkg)/g' \
- $(_cdbs_class_path)/ocaml-docbase-template.txt$(_cdbs_makefile_suffix) \
- > debian/$(cdbs_curpkg).doc-base.ocamldoc-apiref ; \
+ @if (echo $(OCAML_OCAMLDOC_PACKAGES) $(OCAML_OCAMLDOC_PACKAGES_DOCBASE) \
+ | egrep '( |^)$(cdbs_curpkg)( |$$)' > /dev/null) ; then \
+ ocamldoc-api-ref-config --doc-base-generate $(cdbs_curpkg)
fi
+
clean::
rm -f debian/*.doc-base.ocamldoc-apiref
--- /dev/null
+#!/bin/sh
+# ocamldoc-api-ref-config: configuration and generation of .doc-base.ocamldoc-apiref
+# Copyright (C) 2006 Sylvain Le Gall <gildor@debian.org>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2, or (at
+# your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+set -e
+set -x
+
+print_usage ()
+{
+ PRG=`basename $0`
+ cat <<EOF
+$PRG -- Written by Sylvain Le Gall
+"This program is under GPL v2"
+
+Usage:
+$PRG [options] package*
+
+Options:
+--html-directory Output the directory name where the generated ocamldoc
+ generated file should go
+--doc-base-generate Generate debian/PACKAGE.doc-base.ocamldoc-apiref
+
+EOF
+}
+
+error_usage ()
+{
+ print_usage >&2
+ echo $* >&2
+ exit 1
+}
+
+html_directory ()
+{
+ echo "/usr/share/doc/$1/html/api"
+}
+
+doc_base_generate ()
+{
+ if ! test -d "debian"; then
+ echo "Cannot find debian directory for generation" >&2
+ exit 1
+ fi
+ PKG="$1"
+ PKG_DIR=`html_directory $PKG`
+ FILE="debian/$PKG.doc-base.ocamldoc-apiref"
+ echo $FILE
+ cat > $FILE <<EOF
+Document: $PKG-ocamldoc-api-reference
+Title: $PKG OCamldoc API Reference
+Abstract: API reference manual for $PKG (generated via OCamldoc)
+Section: Applications/Programming
+
+Format: HTML
+Index: $PKG_DIR/index.html
+Files: $PKG_DIR/*
+EOF
+}
+
+ACTION=true
+PACKAGE_IDX=1
+
+while test $# -gt 0; do
+ case "$1" in
+ --html-directory)
+ ACTION="html_directory"
+ ;;
+ --doc-base-generate)
+ ACTION="doc_base_generate"
+ ;;
+ --help|-help|-?)
+ print_usage
+ exit 0
+ ;;
+ -*)
+ error_usage "Unknown option $1"
+ ;;
+ *)
+ PACKAGE[$PACKAGE_IDX]=$1
+ PACKAGE_IDX=$(($PACKAGE_IDX + 1))
+ ;;
+ esac
+ shift
+done
+
+for i in `seq $(($PACKAGE_IDX - 1))`; do
+ $ACTION ${PACKAGE[$i]}
+done
+