last-svn-commit-85-g6e3d7dd Add a script to generate doc/figures.mk.

* doc/gen-figures-mk: New script. * doc/Makefile.am (EXTRA_DIST): Add gen-figures-mk. --- milena/ChangeLog | 7 ++ milena/doc/Makefile.am | 2 + milena/doc/gen-figures-mk | 156 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 165 insertions(+), 0 deletions(-) create mode 100755 milena/doc/gen-figures-mk diff --git a/milena/ChangeLog b/milena/ChangeLog index 6fa44d5..43ab816 100644 --- a/milena/ChangeLog +++ b/milena/ChangeLog @@ -1,5 +1,12 @@ 2010-03-20 Roland Levillain <roland@lrde.epita.fr> + Add a script to generate doc/figures.mk. + + * doc/gen-figures-mk: New script. + * doc/Makefile.am (EXTRA_DIST): Add gen-figures-mk. + +2010-03-20 Roland Levillain <roland@lrde.epita.fr> + Use a more uniform style in doc/figures.mk. * doc/figures.mk: Here. diff --git a/milena/doc/Makefile.am b/milena/doc/Makefile.am index b8999bf..ff962ce 100644 --- a/milena/doc/Makefile.am +++ b/milena/doc/Makefile.am @@ -94,6 +94,8 @@ DOC_PACKAGES = doxyfuns.sty milena.sty ## Figures. ## ## --------- ## +EXTRA_DIST += gen-figures-mk + # Generated figures. include $(srcdir)/figures.mk # FIXME: $(FIGURES) is not added to EXTRA_DIST (though it is added to diff --git a/milena/doc/gen-figures-mk b/milena/doc/gen-figures-mk new file mode 100755 index 0000000..cdbffbf --- /dev/null +++ b/milena/doc/gen-figures-mk @@ -0,0 +1,156 @@ +#! /bin/sh + +# Copyright (C) 2010 EPITA Research and Development Laboratory (LRDE). +# +# This file is part of Olena. +# +# Olena 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, version 2 of the License. +# +# Olena 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 Olena. If not, see <http://www.gnu.org/licenses/>. + +me=`basename $0` + +# Use the C locale to have a deterministic sort. +export LC_ALL=C + +# Get this list as argument? +inputs() +{ + # Remove the .cc extension before sorting file names. + find examples -name \*.cc -a \! -path examples/trash/\* \ + | sed 's/.cc$//' \ + | sort \ + | sed 's/$/.cc/' +} + +# get_outputs FILE +# ---------------- +get_outputs() +{ + local outputs= + local i=1 + # Use Perl instead of sed for portability reasons. + for output in `perl -ne \ + "print if s|^\\s*doc::(p.m)save\\s*\\([^;]+,\\s*\"([^\"]+)\"\\);\$|\\2.\\1|" \ + "$1"` + do + # Add a number to the file name. + # FIXME: Maybe we should let the Perl script above do this... + num_output=`echo $output | sed "s,\\(.p.m\\),-$i\\1,"` + if test -z "$outputs"; then + outputs="$num_output" + else + outputs="$outputs $num_output" + fi + i=`expr $i + 1` + done + echo "$outputs" +} + +# upcase STRING +# ------------- +upcase() +{ + # Use enumerated sets to be portable. + echo "$1" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ +} + +# canonicalize STRING +# ------------------- +canonicalize() +{ + echo "$1" | tr .- _ +} + +# backslashify +# ------------ +# Read lines from the standard input and write them on the standard +# output with an extra trailing backslash, except for the last line. +backslashify() +{ + # Set IFS to nothing to prevent `read' from trimming spaces or tabs. + IFS= read last_line + while IFS= read line; do + echo "$last_line \\" + last_line=$line + done + echo "$last_line" +} + +# Empty FIG_VARS. +fig_vars= + +cat<<EOF +## Generated by $me. Do not edit by hand. + +## Figures depend on the timestamp associated with their generator. +## See also examples-outputs.mk. + +EOF + +for file in `inputs`; do + # FIXME: Ugly hack to handle the case of examples/ima-save.cc, since + # this program does not use a `doc::p?msave' routine... + if test "X$file" = "Xexamples/ima-save.cc"; then + # Hard-coded value. + figures="ima_save.pbm" + else + figures=`get_outputs "$file"` + fi + + if test -n "$figures"; then + + # FIXME: Programs of which sources are located in a subdirectory of + # examples/ take the path as prefix of their name. This is a pain. + # It'd be much simpler to have all sources in the same directory. + canonical_name=`echo "$file" \ + | sed -e 's,examples/,,' \ + -e 'y,/,_,' \ + -e 's,\.cc$,,'` + canonical_var=`canonicalize "$canonical_name"` + fig_var="`upcase "$canonical_var"`_FIGURES" + # Populate the list of variables of figures. + if test -z "$fig_vars"; then + fig_vars="$fig_var" + else + fig_vars="$fig_vars $fig_var" + fi + { + echo "$fig_var =" + for figure in $figures; do + echo " \$(srcdir)/figures/$figure" + done + } | backslashify + base=`basename "$file" .cc` + dir=`dirname "$file"` + timestamp="\$(srcdir)/$dir/$base.stamp" + cat <<EOF +\$($fig_var): $timestamp +## Recover from the removal of \$@ + @if test -f \$@; then :; else \\ + rm -f \$<; \\ + \$(MAKE) \$(AM_MAKEFLAGS) \$<; \\ + fi + +EOF + + fi +done + + +# Output the list of figures. +echo "# The list of all generated figures." +{ + echo "FIGURES =" + for v in $fig_vars; do + echo " \$($v)" + done +} | backslashify -- 1.5.6.5
participants (1)
-
Roland Levillain