diff extra/soundsoftware/extract-javadoc.sh @ 247:73ff0e6a11b1 cannam

* Merge from branch cannam-pre-20110113-merge
author Chris Cannam
date Thu, 03 Mar 2011 12:11:53 +0000
parents c3544e9fd588
children 73401a15037b
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/extra/soundsoftware/extract-javadoc.sh	Thu Mar 03 12:11:53 2011 +0000
@@ -0,0 +1,72 @@
+#!/bin/bash
+
+docdir="/var/doc"
+
+project="$1"
+projectdir="$2"
+targetdir="$3"
+
+if [ -z "$project" ] || [ -z "$targetdir" ] || [ -z "$projectdir" ]; then
+    echo "Usage: $0 <project> <projectdir> <targetdir>"
+    exit 2
+fi
+
+if [ ! -d "$projectdir" ]; then
+    echo "Project directory $projectdir not found"
+    exit 1
+fi
+
+if [ ! -d "$targetdir" ]; then
+    echo "Target dir $targetdir not found"
+    exit 1
+fi
+
+if [ -f "$targetdir/index.html" ]; then
+    echo "Target dir $targetdir already contains index.html"
+    exit 1
+fi
+
+# Identify Java files whose packages match the trailing parts of their
+# paths, and list the resulting packages and the path prefixes with
+# the packages removed (so as to find code in subdirs,
+# e.g. src/com/example/...)
+
+# Regexp match is very rough; check what is actually permitted for
+# package declarations
+
+find "$projectdir" -type f -name \*.java \
+    -exec grep '^ *package [a-zA-Z][a-zA-Z0-9\._-]*; *$' \{\} /dev/null \; |
+    sed -e 's/\/[^\/]*: *package */:/' -e 's/; *$//' |
+    sort | uniq | (
+	current_prefix=
+	current_packages=
+	while IFS=: read filepath package; do 
+	    echo "Looking at $package in $filepath"
+	    packagepath=${package//./\/}
+	    prefix=${filepath%$packagepath}
+	    prefix=${prefix:=$projectdir}
+	    if [ "$prefix" = "$filepath" ]; then
+		echo "Package $package does not match suffix of path $filepath, skipping"
+		continue
+	    fi
+	    if [ "$prefix" != "$current_prefix" ]; then
+		if [ -n "$current_packages" ]; then
+		    echo "Running Javadoc for packages $current_packages from prefix $current_prefix"
+		    javadoc -sourcepath "$current_prefix" -d "$targetdir" -subpackages $current_packages
+		fi
+		current_prefix="$prefix"
+		current_packages=
+	    else
+		current_packages="$current_packages $package"
+	    fi
+	done
+	prefix=${prefix:=$projectdir}
+	if [ -n "$current_packages" ]; then
+	    echo "Running Javadoc for packages $current_packages in prefix $current_prefix"
+	    javadoc -sourcepath "$current_prefix" -d "$targetdir" -subpackages $current_packages
+	fi
+    )
+
+# for exit code:
+[ -f "$targetdir/index.html" ]
+